我想寫一個方法,它接受兩個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'? –