2010-10-08 46 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

相關問題