HOW TO:執行運算式樹狀結構 (C# 和 Visual Basic)
本主題說明如何執行運算式樹狀架構。執行運算式樹狀架構可能會傳回一個值,或者只是執行某個動作,例如呼叫方法。
您只能執行表示 Lambda 運算式的運算式樹狀架構。可表示 Lambda 運算式之運算式樹狀架構的型別為 LambdaExpression 或 Expression<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)