2009-09-15 65 views
0

MSDN的節點說:聲明的方式表達構建樹植根於任何類型的

編譯器也可以建立一個 表達式樹爲您服務。 A 編譯器生成的表達式樹是 始終紮根於類型爲 的節點表達式<TDelegate>;即其 根節點表示一個lambda 表達式。

但是,如果我想要建立一個植根於MethodCallExpression,BinaryExpression等類型節點的表達式樹,該怎麼辦?而且不想手動執行此操作。

回答

1

解決方法是聲明2的輔助函數

public Expression GetBody(Expression<Action> lambda) 
{ 
    return lambda.Body; 
} 

public Expression GetBody<TResult>(Expression<Func<TResult>> lambda) 
{ 
    return lambda.Body; 
} 

使用示例:

var e1 = (MethodCallExpression)GetBody(() => this.FunA()); 
var e2 = (ConstantExpression)GetBody(() => 4 + 5); 
var e3 = (BinaryExpression)GetBody(() => a + b);