Sdílet prostřednictvím


Postupy: Provádění stromů výrazů (C# a Visual Basic)

Toto téma popisuje, jak provést ve stromu výraz.Provádění ve stromu výraz může vrátit hodnotu nebo může pouze provedení akce jako je například volání metody.

Mohou být provedeny pouze výraz stromů, které představují lambda výrazů.Výraz stromů, které představují lambda výrazy jsou typu LambdaExpression nebo Expression.Chcete-li provést tyto stromy výraz volání Compile metoda vytvoření spustitelného delegáta a potom vyvolat delegáta.

[!POZNÁMKA]

Pokud není znám typ delegáta, lambda výraz je typu LambdaExpression a Expression, musí volat DynamicInvoke na delegáta, jej přímo vyvolání metody.

Pokud ve stromu výraz nepředstavuje lambda výraz, můžete vytvořit nový lambda výraz, který má původní stromu výraz jako jeho tělo, voláním Lambda``1(Expression, IEnumerableParameterExpression) metoda.Potom můžete provést lambda výraz způsobem popsaným v této části.

Příklad

Následující příklad kódu ukazuje, jak spustit stromu výraz, představující zvýšení číslo do výkonu vytvořením lambda výraz a jeho provádění.Výsledek, což představuje číslo umocněné na napájení, je zobrazen.

        ' 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

Probíhá kompilace kódu

  • Přidejte do projektu odkaz na System.Core.dll Pokud není odkaz.

  • Zahrnout System.Linq.Expressions oboru názvů.

Viz také

Úkoly

Postupy: Úpravy stromů výrazů (C# a Visual Basic)

Koncepty

Stromy výrazů (C# a Visual Basic)