System.Linq.Expressions 名稱空間
阿新 • • 發佈:2018-12-01
簡介
System.Linq.Expressions名稱空間包含類、介面和列舉,這些類、介面和列舉支援將語言級別的程式碼表達式表示為表示式樹形式的物件。
註釋:
1.抽象類Expression提供用於對映到模型的表示式樹類層次結構的根。
2.在此名稱空間中,從Expression類派生的類,用於表示表示式樹種的節點。Expression類包含static(Shared在Visual Basic中)建立表示式樹節點的各種型別的工廠方法。
3.列舉型別ExpressionType指定唯一的節點型別。
序號 | 類 | 描述 |
1 | BinaryExpression | 表示具有二進位制運算子的表示式。 |
2 | BlockExpression | 表示包含一個表示式序列的塊,表示式中可定義變數。 |
3 | CatchBlock | 表示 try 塊中的 catch 語句。 |
4 | ConditionalExpression | 表示包含條件運算子的表示式。 |
5 | ConstantExpression | 表示具有常量值的表示式。 |
6 | DebugInfoExpression | 發出或清除除錯資訊的序列點。 這使偵錯程式能夠在除錯時突出顯示正確的原始碼。 |
7 | DefaultExpression | 表示一個型別或空表示式的預設值。 |
8 | DynamicExpression | 表示一個動態操作。 |
9 | DynamicExpressionVisitor | 表示動態表示式樹的訪問者或重寫者。 |
10 | ElementInit | 表示 |
11 | Expression | 提供一種基類,表示表示式樹節點的類派生自該基類。 它還包含用來建立各種節點型別的 static (在 Visual Basic 中為 Shared )工廠方法。 這是一個 abstract 類。 |
12 | Expression<TDelegate> | 將強型別化的 Lambda 表示式表示為表示式樹形式的資料結構。 此類不能被繼承。 |
13 | ExpressionVisitor | 表示表示式樹的訪問者或重寫者 |
14 | GotoExpression | 表示無條件跳轉。 這包括返回語句,break 和 continue 語句以及其他跳轉。 |
15 | IndexExpression | 表示對一個屬性或陣列進行索引。 |
16 | InvocationExpression | 表示將委託或 lambda 表示式應用於引數表示式列表的表示式。 |
17 | LabelExpression | 表示一個標籤,可以將該標籤放置在任何 Expression 上下文中。 如果已跳轉到該標籤,則它將獲取由對應的 GotoExpression 提供的值。 否則,它接收 DefaultValue 中的值。 如果 Type 等於 System.Void,則不應提供值。 |
18 | LabelTarget | 用於表示 GotoExpression 的目標。 |
19 | LambdaExpression | 介紹 lambda 表示式。 它捕獲一個類似於 .NET 方法主體的程式碼塊。 |
20 | ListInitExpression | 表示具有集合初始值設定項的建構函式呼叫。 |
21 | LoopExpression | 表示無限迴圈。 可通過“中斷”退出該迴圈。 |
22 | MemberAssignment | 表示物件的欄位或屬性的賦值操作。 |
23 | MemberBinding | 提供表示繫結的類派生自的基類,這些繫結用於對新建立物件的成員進行初始化。 |
24 | MemberExpression | 表示訪問欄位或屬性。 |
25 | MemberInitExpression | 表示呼叫建構函式並初始化新物件的一個或多個成員。 |
26 | MemberListBinding | 表示初始化新建立物件的一個集合成員的元素。 |
27 | MemberMemberBinding | 表示初始化新建立物件的一個成員的成員。 |
28 | MethodCallExpression | 表示對靜態方法或例項方法的呼叫。 |
29 | NewArrayExpression | 表示建立一個新陣列,並可能初始化該新陣列的元素。 |
30 | NewExpression | 表示一個建構函式呼叫。 |
31 | ParameterExpression | 表示一個命名的引數表示式。 |
32 | RuntimeVariablesExpression | 一個為變數提供執行時讀/寫許可權的表示式 |
33 | SwitchCase | 表示 SwitchExpression 的一個事例。 |
34 | SwitchExpression | 表示一個控制表示式,該表示式通過將控制傳遞到 SwitchCase 來處理多重選擇。 |
35 | SymbolDocumentInfo | 儲存用於發出原始檔除錯符號資訊所必要的資訊,尤其是檔名和唯一的語言識別符號。 |
36 | TryExpression | 表示一個 try/catch/finally/fault 塊 |
37 | TypeBinaryExpression | 表示表示式和型別之間的操作。 |
38 | UnaryExpression | 表示具有一元運算子的表示式。 |
序號 | 介面 | 描述 |
1 | IArgumentProvider | 提供用於訪問多個樹節點(DynamicExpression、ElementInit、MethodCallExpression、InvocationExpression、NewExpression 和 InexExpression)的引數的內部介面。 不應使用此 API。 它只會由於 DLL 重構而公開並僅用於內部效能優化。 這能夠實現兩次優化,從而減少了表示式樹的大小。 第一次優化可以使樹節點保留在 IList <T> 上而不是 ReadOnlyCollection 上。 IList <T> 可節省為每個節點分配 ReadOnlyCollection 的成本。 第二次優化能夠建立專用的子類,可保留特定數量的自變數(例如,Block2、Block3、Block4)。 因此,這些節點避免了分配用於儲存其元素的 ReadOnlyCollection 和陣列,從而為每個節點節省了 32 個位元組。 表示式樹節點繼續公開 ReadOnlyCollections 的原始 LINQ 屬性。 這些節點通過重複使用用於儲存陣列或元素(通常儲存在陣列中)的欄位來執行此操作。 對於陣列用例,集合將型別化為 IList <T>,而不是 ReadOnlyCollection <T>。 當節點在最初構造時它是一個數組。 當編譯器訪問成員時它會使用此介面。 訪問陣列元素可以將陣列升級到 ReadOnlyCollection。 對於物件用例,我們會儲存型別化為物件的欄位中的第一個引數。 當最初構造該節點時,該欄位將持有該表示式。 編譯器通過此介面訪問引數,第一個引數的訪問器使用 Expression.ReturnObject 返回用於處理表達式或 ReadOnlyCollection 用例的物件。 當用戶訪問 ReadOnlyCollection 時,將更新物件欄位以直接保留 ReadOnlyCollection。 表示式始終返回相同的 ReadOnlyCollection,這一點很重要。 否則,將中斷重寫樹檢視器。 從 LINQ v1 返回不同的 ReadOnlyCollections 形成相同的表示式節點,這是一個重大突破。當前使用者可以依賴物件標識來區分該節點是否已更改。 在過載欄位中儲存 ReadOnlyCollection 既可減少記憶體使用量,又可保持公共 API 相容性。 |
2 | IDynamicExpression | 提供用於訪問 DynamicExpression 樹節點的引數及 CallSite 和重寫功能的內部介面。 不應使用此 API。 由於 DLL 重構,它只能是公共的;並且僅用於內部效能優化。 |
序號 | 列舉 | 描述 |
1 | ExpressionType | 介紹表示式樹節點的節點型別。 |
2 | GotoExpressionKind | 指定此 GotoExpression 表示的跳轉種類。 |
3 | MemberBindingType | 描述 MemberInitExpression 物件中使用的繫結型別。 |