zoukankan      html  css  js  c++  java
  • 生成表达式目录树 泛型缓存

     1 using System;
     2 using System.Collections.Generic;
     3 using System.Linq;
     4 using System.Linq.Expressions;
     5 using System.Text;
     6 using System.Threading.Tasks;
     7 
     8 namespace ExpressionDemo.MappingExtend
     9 {
    10     /// <summary>
    11     /// 生成表达式目录树  泛型缓存
    12     /// </summary>
    13     /// <typeparam name="TIn"></typeparam>
    14     /// <typeparam name="TOut"></typeparam>
    15     public class ExpressionGenericMapper<TIn, TOut>//Mapper`2
    16     {
    17         private static Func<TIn, TOut> _FUNC = null;
    18         static ExpressionGenericMapper()
    19         {
    20             ParameterExpression parameterExpression = Expression.Parameter(typeof(TIn), "p");
    21             List<MemberBinding> memberBindingList = new List<MemberBinding>();
    22             foreach (var item in typeof(TOut).GetProperties())
    23             {
    24                 MemberExpression property = Expression.Property(parameterExpression, typeof(TIn).GetProperty(item.Name));
    25                 MemberBinding memberBinding = Expression.Bind(item, property);
    26                 memberBindingList.Add(memberBinding);
    27             }
    28             foreach (var item in typeof(TOut).GetFields())
    29             {
    30                 MemberExpression property = Expression.Field(parameterExpression, typeof(TIn).GetField(item.Name));
    31                 MemberBinding memberBinding = Expression.Bind(item, property);
    32                 memberBindingList.Add(memberBinding);
    33             }
    34             MemberInitExpression memberInitExpression = Expression.MemberInit(Expression.New(typeof(TOut)), memberBindingList.ToArray());
    35             Expression<Func<TIn, TOut>> lambda = Expression.Lambda<Func<TIn, TOut>>(memberInitExpression, new ParameterExpression[]
    36             {
    37                     parameterExpression
    38             });
    39             _FUNC = lambda.Compile();//拼装是一次性的
    40         }
    41         public static TOut Trans(TIn t)
    42         {
    43             return _FUNC(t);
    44         }
    45     }
    46 }
  • 相关阅读:
    10个强大的Apache开源模块
    Flume日志收集(转载)
    hbase安装配置(整合到hadoop)
    Hadoop与HBase兼容版本汇总
    关于Mysql Proxy LUA实现Mysql读写分离
    Redis发布了集群版3.0.0 beta
    Spring MVC 学习之 400 错误
    Mahout安装(Hadoop 1.2.1 版本)
    【Android】性能优化
    【Android】asynchronous http client
  • 原文地址:https://www.cnblogs.com/yanglang/p/15216000.html
Copyright © 2011-2022 走看看