我想写一个方法,它接受两个MemberExpression,并生成一个委托,它接受两个对象 - source和target,并根据它的MemberExpression将来源的值赋给目标字段,根据第二个MemberExpression。这些对象不必是同一类型的。 我正在寻找这样的事情:如何根据另一个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'? –