Udostępnij za pośrednictwem


Porady: wykonywanie drzew wyrażeń (C# i Visual Basic)

W tym temacie przedstawiono sposób wykonywania wyrażenia drzewa.Wykonywanie drzewa wyrażenie może zwracać wartość lub on, że wystarczy wykonać akcję, takie jak wywoływanie metody.

Mogą być wykonywane tylko drzew wyrażenie, które reprezentują wyrażenia lambda.Wyrażenie drzew, które reprezentują wyrażenia lambda jest typu LambdaExpression lub Expression.Wykonanie tych drzew wyrażenie, call Compile metodę, aby utworzyć wykonywalny pełnomocnika, a następnie wywołać pełnomocnika.

[!UWAGA]

Jeśli nie jest znany typ delegata, oznacza to, że wyrażenie lambda jest typu LambdaExpression i nie Expression, trzeba wywołać DynamicInvoke metody obiektu delegowanego zamiast wywoływania go bezpośrednio.

Jeśli drzewo wyrażenie nie reprezentuje wyrażenie lambda, można utworzyć nowe wyrażenie lambda, które ma oryginalny drzewo wyrażenia jako jej ciała, wywołując Lambda``1(Expression, IEnumerableParameterExpression) metody.Następnie można wykonać wyrażenia lambda, jak opisano wcześniej w tej sekcji.

Przykład

Poniższy przykład kodu demonstruje, jak wykonać drzewa wyrażenie, reprezentującą podnoszenie liczby do potęgi poprzez utworzenie wyrażenia lambda i jej wykonania.Wynik, który reprezentuje liczbę podniesioną do potęgi, jest wyświetlany.

        ' 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

Kompilowanie kodu

  • Dodaj odwołanie projektu do System.Core.dll, jeśli nie jest wywoływany.

  • Dołącz obszar nazw System.Linq.Expressions.

Zobacz też

Zadania

Porady: modyfikowanie drzew wyrażeń (C# i Visual Basic)

Koncepcje

Drzewa wyrażeń (C# i Visual Basic)