このトピックでは、式ツリーを実行する方法について説明します。 式ツリーを実行すると、値が返されたり、メソッドの呼び出しなどのアクションが実行されたりすることがあります。
ラムダ式を表す式ツリーのみを実行できます。 ラムダ式を表す式ツリーは、 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
コードをコンパイルする
- System.Linq.Expressions 名前空間を含めます。
こちらも参照ください
GitHub で Microsoft と共同作業する
このコンテンツのソースは GitHub にあります。そこで、issue や pull request を作成および確認することもできます。 詳細については、共同作成者ガイドを参照してください。
.NET