Expression<TDelegate> 類別
定義
重要
部分資訊涉及發行前產品,在發行之前可能會有大幅修改。 Microsoft 對此處提供的資訊,不做任何明確或隱含的瑕疵擔保。
將強類型 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> 所代表之委派的型別。
- 繼承
範例
下列程式代碼範例示範如何將 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>參數。
NodeType的 Expression<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) |