共用方式為


HOW TO:執行運算式樹狀架構

更新:2007 年 11 月

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

您只能執行表示 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:修改運算式樹狀架構

概念

運算式樹狀架構