Expression<TDelegate> 類別

定義

將強類型 Lambda 運算式表示為運算式樹狀架構形式的資料結構。 此類別無法獲得繼承。

generic <typename TDelegate>
public ref class Expression sealed : System::Linq::Expressions::LambdaExpression
public sealed class Expression<TDelegate> : System.Linq.Expressions.LambdaExpression
type Expression<'Delegate> = class
    inherit LambdaExpression
Public NotInheritable Class Expression(Of TDelegate)
Inherits LambdaExpression

類型參數

TDelegate

Expression<TDelegate> 所代表之委派的型別。

繼承
Expression<TDelegate>

範例

下列程式碼範例示範如何將 Lambda 運算式表示為委派形式的可執行程式碼,以及以運算式樹狀結構形式表示為數據。 它也會示範如何使用 方法,將運算式樹狀結構轉回可執行檔程式 Compile 代碼。


// Lambda expression as executable code.
Func<int, bool> deleg = i => i < 5;
// Invoke the delegate and display the output.
Console.WriteLine("deleg(4) = {0}", deleg(4));

// Lambda expression as data in the form of an expression tree.
System.Linq.Expressions.Expression<Func<int, bool>> expr = i => i < 5;
// Compile the expression tree into executable code.
Func<int, bool> deleg2 = expr.Compile();
// Invoke the method and print the output.
Console.WriteLine("deleg2(4) = {0}", deleg2(4));

/*  This code produces the following output:

    deleg(4) = True
    deleg2(4) = True
*/

' Lambda expression as executable code.
Dim deleg As Func(Of Integer, Boolean) = Function(ByVal i) i < 5
' Invoke the delegate and display the output.
MsgBox(String.Format("deleg(4) = {0}", deleg(4)))

' Lambda expression as data in the form of an expression tree.
Dim expr As System.Linq.Expressions.Expression(Of Func(Of Integer, Boolean)) = Function(ByVal i) i < 5
' Compile the expression tree into executable code.
Dim deleg2 As Func(Of Integer, Boolean) = expr.Compile()
' Invoke the method and print the output.
MsgBox(String.Format("deleg2(4) = {0}", deleg2(4)))

' This code produces the following output:
'
' deleg(4) = True
' deleg2(4) = True

備註

當 Lambda 運算式指派給類型為 Expression<TDelegate> 的變數、欄位或參數時,編譯器會發出指示來建置運算式樹狀結構。

注意

如果從 Lambda 運算式轉換成 Expression<D>Expression(Of D) 類型 D 委派存在,則 Visual Basic 中的類型轉換 (存在) 。 不過,如果 Lambda 運算式的主體是區塊,轉換可能會失敗。 這表示委派和運算式樹狀結構的行為與多載解析類似。

運算式樹狀結構是 Lambda 運算式的記憶體內部資料標記法。 運算式樹狀結構讓 Lambda 運算式的結構透明且明確。 您可以與運算式樹狀結構中的資料互動,就像可以與任何其他資料結構互動一樣。

將運算式視為資料結構的能力,可讓 API 以可透過自訂方式檢查、轉換和處理的格式接收使用者程式碼。 例如,LINQ to SQL資料存取實作會使用這項功能,將運算式樹狀架構轉譯為資料庫可評估的 Transact-SQL 語句。

類別中 Queryable 定義的許多標準查詢運算子都有一或多個 類型的 Expression<TDelegate> 參數。

NodeTypeExpression<TDelegate>Lambda

Lambda<TDelegate>(Expression, IEnumerable<ParameterExpression>)使用 或 Lambda<TDelegate>(Expression, ParameterExpression[]) 方法來建立 Expression<TDelegate> 物件。

屬性

Body

取得 Lambda 運算式的主體。

(繼承來源 LambdaExpression)
CanReduce

表示節點可精簡為更簡單的節點。 如果傳回 true,則可呼叫 Reduce() 以產生精簡的形式。

(繼承來源 Expression)
Name

取得 Lambda 運算式的名稱。

(繼承來源 LambdaExpression)
NodeType

傳回這個 Expression 的節點類型。

(繼承來源 LambdaExpression)
Parameters

取得 Lambda 運算式的參數。

(繼承來源 LambdaExpression)
ReturnType

取得 Lambda 運算式的傳回型別。

(繼承來源 LambdaExpression)
TailCall

取得值,這個值表示 Lambda 運算式是否會以 tail 呼叫最佳化來編譯。

(繼承來源 LambdaExpression)
Type

取得此 Expression 代表之運算式的靜態類型。

(繼承來源 LambdaExpression)

方法

Accept(ExpressionVisitor)

分派給這個節點類型的特定造訪方法。 例如,MethodCallExpression 會呼叫 VisitMethodCall(MethodCallExpression)

(繼承來源 Expression)
Compile()

將運算式樹狀架構所描述的 Lambda 運算式編譯為可執行程式碼,並產生表示 Lambda 運算式的委派。

Compile(Boolean)

將運算式樹狀架構所描述的 Lambda 運算式,編譯成已解譯或已編譯的程式碼,並產生代表 Lambda 運算式的委派。

Compile(Boolean)

會產生代表 Lambda 運算式的解譯或編譯委派。

(繼承來源 LambdaExpression)
Compile(DebugInfoGenerator)

產生代表 Lambda 運算式的委派。

Compile(DebugInfoGenerator)

產生代表 Lambda 運算式的委派。

(繼承來源 LambdaExpression)
CompileToMethod(MethodBuilder)

將 Lambda 編譯為方法定義。

(繼承來源 LambdaExpression)
CompileToMethod(MethodBuilder, DebugInfoGenerator)

將 Lambda 編譯為方法定義和自訂偵錯資訊。

(繼承來源 LambdaExpression)
Equals(Object)

判斷指定的物件是否等於目前的物件。

(繼承來源 Object)
GetHashCode()

做為預設雜湊函式。

(繼承來源 Object)
GetType()

取得目前執行個體的 Type

(繼承來源 Object)
MemberwiseClone()

建立目前 Object 的淺層複製。

(繼承來源 Object)
Reduce()

將這個節點精簡為更簡單的運算式。 如果 CanReduce 傳回 true,則應該傳回有效的運算式。 這個方法可以傳回其他本身必須精簡的節點。

(繼承來源 Expression)
ReduceAndCheck()

將這個節點精簡為更簡單的運算式。 如果 CanReduce 傳回 true,則應該傳回有效的運算式。 這個方法可以傳回其他本身必須精簡的節點。

(繼承來源 Expression)
ReduceExtensions()

將運算式精簡為已知的節點類型 (不是 Extension 節點),如果已經是已知的類型,則僅傳回運算式。

(繼承來源 Expression)
ToString()

傳回 Expression 的文字表示。

(繼承來源 Expression)
Update(Expression, IEnumerable<ParameterExpression>)

建立類似這個運算式的新運算式,但使用提供的子系。 如果所有子系都相同,則會傳回這個運算式。

VisitChildren(ExpressionVisitor)

精簡節點,然後呼叫精簡後的運算式上的訪問項委派。 如果節點無法縮減,此方法會擲回例外狀況。

(繼承來源 Expression)

適用於

另請參閱