C# 表达式目录树的应用详解
使用表达式目录树实现两个不同类型的属性赋值:
publicclassPeople
{
publicintAge{get;set;}
publicstringName{get;set;}
publicintId;
}
publicclassPeopleCopy
{
publicintAge{get;set;}
publicstringName{get;set;}
publicintId;
}
publicclassClass1
{
privatestaticDictionary_Dic=newDictionary();
privatestaticTOutTransExp(TIntIn){
stringkey=$"funckey_{typeof(TIn).FullName}_{typeof(TOut).FullName}";
if(!_Dic.Keys.Contains(key)){
ParameterExpressionparameterExpression=Expression.Parameter(typeof(TIn),"p");
ListmemberBindingList=newList();
foreach(varitemintypeof(TOut).GetProperties())
{
PropertyInfopropertyInfo=typeof(TIn).GetProperty(item.Name);
if(propertyInfo==null){continue;}
MemberExpressionproperty=Expression.Property(parameterExpression,propertyInfo);
memberBindingList.Add(Expression.Bind(item,property));
}
foreach(varitemintypeof(TOut).GetFields())
{
FieldInfofieldInfo=typeof(TIn).GetField(item.Name);
if(fieldInfo==null){continue;}
MemberExpressionproperty=Expression.Field(parameterExpression,fieldInfo);
memberBindingList.Add(Expression.Bind(item,property));
}
Expression>expression=Expression.Lambda>(Expression.MemberInit(Expression.New(typeof(TOut)),memberBindingList),newParameterExpression[]
{
parameterExpression
});
Funcfunc=expression.Compile();
_Dic.Add(key,func);
}
return((Func)_Dic[key])(tIn);
}
}
staticvoidMain(string[]args)
{
ListPeoleCopyList=newList();
for(inti=0;i<5;i++)
{
ClassLibrary1.Peoplepeople=newClassLibrary1.People(){Id=5+1,Age=25,Name="aaa"+i};
PeoleCopyList.Add(Class1.ToutGet(people));
}
}
以上这篇C#表达式目录树的应用详解就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持毛票票。
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。