共用方式為


HOW TO:執行運算式樹狀結構 (C# 和 Visual Basic)

本主題說明如何執行運算式樹狀架構。執行運算式樹狀架構可能會傳回一個值,或者只是執行某個動作,例如呼叫方法。

您只能執行表示 Lambda 運算式的運算式樹狀架構。可表示 Lambda 運算式之運算式樹狀架構的型別為 LambdaExpressionExpression<TDelegate>。若要執行這些運算式樹狀架構,請呼叫 Compile 方法來建立可執行的委派 (Delegate),接著再叫用 (Invoke) 委派。

注意事項注意事項

如果委派的型別是未知的,也就是說,Lambda 運算式的型別是 LambdaExpression,而不是 Expression<TDelegate>,這時您就必須在委派上呼叫 DynamicInvoke 方法,而不是直接叫用該方法。

如果運算式樹狀架構未表示為 Lambda 運算式,您可以藉由呼叫 Lambda<TDelegate>(Expression, IEnumerable<ParameterExpression>) 方法,建立以原始的運算式樹狀架構做為主體的新 Lambda 運算式。接著,您就可以依據本節稍早所述方法來執行該 Lambda 運算式。

範例

下列程式碼範例將示範如何執行運算式樹狀架構,該運算式樹狀架構代表藉由建立 Lambda 運算式並加以執行,以便將數字提升為乘冪數。接著顯示表示數字已提升為乘冪數的結果。

        ' 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

編譯程式碼

  • 將專案參考加入至 System.Core.dll (如果尚未參考)。

  • 包含 System.Linq.Expressions 命名空間 (Namespace)。

請參閱

工作

HOW TO:修改運算式樹狀架構 (C# 和 Visual Basic)

概念

運算式樹狀架構 (C# 和 Visual Basic)