2010-10-08 99 views
0

这里是我的方法:ExpressionTree - GetSetMethod错误:方法 'System.String GET_NAME()' 没有为类型 'System.String' 定义

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,则会出现类似的错误。

回答

3

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

将其更改为

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

谢谢,你明白了。 – chief7 2010-10-08 15:33:10

0

没关系,我张贴后想通了如2秒。为什么我总是这样做?

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

+2

因为当你向他人解释事情时,他们会变得清楚:-)如果你没有写这篇文章,那么你可能花更多的时间来解决问题。 – 2010-10-08 20:18:01

相关问题