Поделиться через


Как выполнять деревья выражений (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.

См. также