方法: 式ツリーを実行する (Visual Basic)

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

実行できるのは、ラムダ式を表す式ツリーのみです。 ラムダ式を表す式ツリーの型は、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 名前空間をインクルードします。

関連項目