ExpressionTree - GetSetMethod错误:没有为类型'System.String'定义方法'System.String get_Name()'

时间:2010-10-08 15:25:05

标签: c# reflection lambda expression-trees

这是我的方法:

    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,我会收到类似的错误。

2 个答案:

答案 0 :(得分:3)

您正在尝试获取Name对象的string属性。

将其更改为

return Expression.Call(targetExp, propertyInfo.GetSetMethod(), sourceProperty);

答案 1 :(得分:0)

没关系,我在发布后的2秒内想出来了。为什么我总是这样做?

Expression.Call的第一个参数应该是targetExp。