欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

C# 快速高效率复制对象另一种方式 表达式树

程序员文章站 2022-06-05 20:58:07
作者:Emrys 出处:http://www.cnblogs.com/emrys5/ 原文地址:https://www.cnblogs.com/emrys5/p/expression_trans_model.html 在Emrys 的文章中 3.4 利用泛型的特性再次优化代码,中的代码,做了一下优化 ......

 

作者: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);
}
}