2016-07-05 52 views
2

如何通过使用“直接”反射匹配UnaryExpression“成员名称”而不是来获取对象属性值?通过一元表达式访问对象属性值

public object DoSomething<T>(UnaryExpression uExp, T obj) 
    {    
     object res = null;      
     // NOTE: UnaryExpression contains a property from T type. 
     // TODO: get UnaryExpressionMatchingProperty value 

     // res = obj.UnaryExpressionMatchingProperty; 
     return res; 
    } 
+0

'uExp.Operand如MemberExpression',然后得到的部件的细节? – Jim

回答

0

这应该产生的值或null如果一元表达式的结构并不如预期:

var prop = ((uExp.Operand as MemberExpression)?.Member as PropertyInfo); 
if (prop?.CanRead == true) { // Needs "== true" because ?. makes Nullable<bool> 
    res = prop.GetValue(obj); 
}