【发布时间】:2015-09-03 10:29:04
【问题描述】:
我想编写一个接受两个 MemberExpression 的方法,并生成一个接受两个对象(源和目标)的委托,并根据它的 MemberExpression 将源中的值分配给目标的字段,根据第二个成员表达式。对象不必是同一类型。 我正在寻找这样的东西:
public Action<TSource, TTarget> Map(Expression<Func<TSource, object>> getter, Expression<Func<TTarget, object>> setter)
{
var sourceField = getter.Body as MemberExpression;
var targetField = setter.Body as MemberExpression;
/*
* Now I would like to create a lambda expression which accepts TSource and TTarget instances,
* and assings TTarget according to the above getter and setter expressions. Kind of like:
* var assignExp = Expression.Assign(x, y);
* var lambda = Expression.Lambda<Action<TTarget, TSource>>( .... ).Compile();
* return lambda;
*/
}
用法:
Target target;
Source source;
//...
var action = Map(p => p.NestedField.Dummy, x => x.TargetName);
action(source, target);
我不明白如何构建要发送到Expression.Assign 的表达式。
此时,我不介意空值或字段的初始化。请假设所有字段都已初始化。
【问题讨论】:
-
好吧,你已经得到了注释掉的代码......当你尝试这样做时会发生什么,但是使用
targetField和sourceField而不是x和y?
标签: c# .net lambda expression expression-trees