2015-08-19 98 views
0

我有以下字符串表達式定義對象遍歷 「e.B.num」。其中e定義我的字符串表達如何爲多級屬性/子屬性構建表達式樹

class BTest 
{  
    public int num{get:set;} 
} 

class Test 
{ 
    public int sample {get; set;} 
    public BTest B {get; set;} 
} 

static void TestProperty() 
{ 
    Test obj = new Test(); 
    obj.sample = 40; 
    obj.B = new BTest(){ num=5} 

    Expression propertyExpr = Expression.Property(Expression.Constant(obj),"num"); 

    Console.WriteLine(Expression.Lambda<Func<int>>(propertyExpr).Compile()()); 

}

在下面陳述Expression.Property根實體(Expression.Constant(OBJ), 「NUM」);我能夠獲得第一級屬性「樣本」的值,但不能獲得第二級屬性的值?

我在這裏錯過了什麼嗎?我正在嘗試基於「num」屬性值構建一個二進制表達式。

回答

3

您必須在查找嵌套屬性時創建嵌套屬性表達式。

Expression bExpression = Expression.Property(Expression.Constant(obj), "B"); 
Expression numExpression = Expression.Property(bExpression, "num"); 

Console.WriteLine(Expression.Lambda<Func<int>>(numExpression).Compile()());//Prints 5