C# 快速高效率复制对象另一种方式 表达式树
作者:emrys
出处:
原文地址:https://www.cnblogs.com/emrys5/p/expression_trans_model.html
在emrys 的文章中 3.4 利用泛型的特性再次优化代码,中的代码,做了一下优化,以下为代码红色部分为修改内容
public class transexpressionconvert<tin, tout>
{
private static readonly func<tin, tout> transfunc = getfunc();
private static func<tin, tout> getfunc()
{
var tintype = typeof(tin);
var touttype = typeof(tout);
parameterexpression parameterexpression = expression.parameter(tintype, "param");
list<memberbinding> memberbindinglist = new list<memberbinding>();
foreach (var item in touttype.getproperties())
{
if (!item.canwrite)
continue;
var propertyinfo = tintype.getproperty(item.name);
if (propertyinfo == null || propertyinfo.propertytype != item.propertytype)
continue;
memberexpression property = expression.property(parameterexpression, propertyinfo);
memberbinding memberbinding = expression.bind(item, property);
memberbindinglist.add(memberbinding);
}
memberinitexpression memberinitexpression =
expression.memberinit(expression.new(touttype), memberbindinglist.toarray());
expression<func<tin, tout>> lambda =
expression.lambda<func<tin, tout>>(memberinitexpression, parameterexpression);
return lambda.compile();
}
public static tout trans(tin tin)
{
return transfunc(tin);
}
}
上一篇: 延时执行函数:前浪死在沙滩上
下一篇: (一)设计模式系列---单例模式