Como: Executar árvores de expressão

Este tópico mostra como executar uma árvore de expressão.Execução de uma árvore de expressão pode retornar um valor ou ele apenas pode executar uma ação sistema autônomo chamar um método.

Somente as árvores de expressão que representam as expressões lambda podem ser executadas.As árvores de expressão que representam as expressões lambda são do tipo LambdaExpression ou Expression<TDelegate>. Para executar essas árvores de expressão telefonar o Compile método para criar um delegado executável e, em seguida, chamar o delegado.

Observação:

Se o tipo do delegado não for conhecido, ou seja, a expressão lambda é do tipo LambdaExpression e não Expression<TDelegate>, você deve chamar o DynamicInvoke método de delegado em vez de chamá-lo diretamente.

Se uma árvore de expressão não representar uma expressão lambda, você pode criar uma nova expressão lambda que tem árvore de expressão original sistema autônomo seu corpo, chamando o Lambda<TDelegate>(Expression, IEnumerable<ParameterExpression>) método. Em seguida, você pode executar a expressão lambda conforme descrito anteriormente nesta seção.

Exemplo

O exemplo de código a seguir demonstra como executar uma árvore de expressões representando elevar um número a uma potência, criando uma expressão lambda e executá-lo.O resultado, o que representa o número elevado à potência, é exibido.

' 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

Compilando o código

  • Adicione uma referência de projeto para sistema.Core.dll se ele já não é referenciado.

  • Inclua o espaço para nome sistema.Linq.Expressions.

Consulte também

Tarefas

Como: Modificar árvores de expressão

Conceitos

Árvores de Expressão