Como: Executar as árvores de expressão (C# e Visual Basic)

Este tópico mostra como executar uma árvore de expressão. A execução de uma árvore de expressão pode retornar um valor, ou ele pode apenas executar uma ação como, por exemplo, chamar um método.

Somente as árvores de expressão que representam as expressões lambda podem ser executadas. Á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, chame o Compile método para criar um executável delegado e então chama o delegado.

ObservaçãoObservaçã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 em que o delegado em vez de invocar diretamente.

Se uma árvore de expressão não representa uma expressão lambda, você pode criar uma nova expressão lambda que tenha a árvore de expressão original como 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ão que representa a 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 a System.Core.dll se já não é referenciado.

  • Inclua o namespace System.Linq.Expressions.

Consulte também

Tarefas

Como: Modificar as árvores de expressão (C# e Visual Basic)

Conceitos

Árvores de expressão (C# e Visual Basic)