这是我的方法:
public static MethodCallExpression ClonePropertyAssignmentLambda<T>(Expression source, string property)
{
var targetExp = Expression.Parameter(typeof (T), "target");
var propertyInfo = typeof (T).GetProperty(property);
var targetProperty = Expression.Property(targetExp, propertyInfo);
var sourceProperty = Expression.Property(source, propertyInfo);
return Expression.Call(targetProperty, ((PropertyInfo) targetProperty.Member).GetSetMethod(), sourceProperty);
}
以下是我如何称呼它:
ClonePropertyAssignmentLambda<Person>(source, "Name")
我在Expression.Call行上收到错误。如果我调用GetGetMethod,我会收到类似的错误。
答案 0 :(得分:3)
您正在尝试获取Name
对象的string
属性。
将其更改为
return Expression.Call(targetExp, propertyInfo.GetSetMethod(), sourceProperty);
答案 1 :(得分:0)
没关系,我在发布后的2秒内想出来了。为什么我总是这样做?
Expression.Call的第一个参数应该是targetExp。