0

MSDN は次のように述べています。

コンパイラは、式ツリーを構築することもできます。コンパイラによって生成された式ツリーは、常に Expression<TDelegate> 型のノードをルートとします。つまり、そのルート ノードはラムダ式を表します。

しかし、MethodCallExpression、BinaryExpression などのタイプのノードをルートとする式ツリーを構築したい場合はどうすればよいでしょうか? そして、これを手動で行いたくありません。

4

1 に答える 1

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);
于 2009-09-15T14:06:51.217 に答える