次の方法で共有


方法 : 式ツリーを実行する

更新 : 2007 年 11 月

ここでは、式ツリーを実行する方法について説明します。式ツリーを実行すると値が返される場合もありますが、メソッドの呼び出しなどの処理が実行されるだけの場合もあります。

実行できるのは、ラムダ式を表す式ツリーのみです。ラムダ式を表す式ツリーの型は、LambdaExpression または Expression<TDelegate> です。このような式ツリーを実行するには、Compile メソッドを呼び出して実行可能なデリゲートを作成した後、そのデリゲートを呼び出します。

メモ :

デリゲートの型が不明な場合、つまりラムダ式が LambdaExpression 型であり Expression<TDelegate> 型ではない場合には、デリゲートを直接呼び出さずに、デリゲートに対して DynamicInvoke メソッドを呼び出す必要があります。

式ツリーがラムダ式を表さない場合、Lambda<TDelegate>(Expression, IEnumerable<ParameterExpression>) メソッドを呼び出すことで、元の式ツリーを本体に含む新しいラムダ式を作成できます。その後、このセクションの説明のとおりにラムダ式を実行できます。

使用例

次のコード例を使って、ラムダ式を作成して実行することで数値の累乗を表す式ツリーの実行方法を示します。実行すると、累乗された数値を表す結果が表示されます。

' The expression tree to execute.
Dim be As BinaryExpression = Expression.Power(Expression.Constant(2.0R), Expression.Constant(3.0R))

' Create a lambda expression.
Dim le As Expression(Of Func(Of Double)) = Expression.Lambda(Of Func(Of Double))(be)

' Compile the lambda expression.
Dim compiledExpression As Func(Of Double) = le.Compile()

' Execute the lambda expression.
Dim result As Double = compiledExpression()

' Display the result.
MsgBox(result)

' This code produces the following output:
' 8

// The expression tree to execute.
BinaryExpression be = Expression.Power(Expression.Constant(2D), Expression.Constant(3D));

// Create a lambda expression.
Expression<Func<double>> le = Expression.Lambda<Func<double>>(be);

// Compile the lambda expression.
Func<double> compiledExpression = le.Compile();

// Execute the lambda expression.
double result = compiledExpression();

// Display the result.
Console.WriteLine(result);

// This code produces the following output:
// 8

コードのコンパイル方法

  • System.Core.dll がまだ参照されていない場合は、System.Core.dll へのプロジェクト参照を追加します。

  • System.Linq.Expressions 名前空間を含めます。

参照

処理手順

方法 : 式ツリーを変更する

概念

式ツリー