Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
В этом разделе показано, как выполнить дерево выражений. Выполнение дерева выражений может возвращать значение или просто выполнять действие, например вызов метода.
Можно выполнять только деревья выражений, представляющие лямбда-выражения. Деревья выражений, представляющие лямбда-выражения, имеют тип 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.