表达式树对象转换器
定义两个对象
public class Person
{
public int Id { get; set; }
public string Name { get; set; }
public int Age { get; set; }
}
public class NewPerson
{
public int Id { get; set; }
public string Name { get; set; }
public int Age { get; set; }
}
创建表达式树转换器
public class ExpressionMapper<TIn, TOut>
{
private static Func<TIn, TOut> _mapper = null;
static ExpressionMapper()
{
ParameterExpression parameterExpression = Expression.Parameter(typeof(TIn), "x");
List<MemberBinding> bindings = new List<MemberBinding>();
foreach (var property in typeof(TOut).GetProperties())
{
MemberExpression member = Expression.Property(parameterExpression, typeof(TIn).GetProperty(property.Name));
MemberBinding binding = Expression.Bind(property, member); // x=>x.Id
bindings.Add(binding);
}
MemberInitExpression memberInitExpression = Expression.MemberInit(Expression.New(typeof(TOut)), bindings.ToArray()); //new newPersion(){Id=x.Id,Name=x.Name,Age=x.Aget}
var funcExp = Expression.Lambda<Func<TIn, TOut>>(memberInitExpression, parameterExpression); // x=> new newPersion(){Id=x.Id,Name=x.Name,Age=x.Aget}
_mapper = funcExp.Compile();
}
public static TOut Mapper(TIn sour)
{
return _mapper(sour);
}
}
源对象转换为目标对象
var person = new Person()
{
Id = 1,
Name = "张三",
Age = 2
};
var newPersion = ExpressionMapper<Person, NewPerson>.Mapper(person);
分类:
其他 / 表达式树
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架