IArgumentProvider 介面

定義

提供內部介面以存取多個樹狀節點 (DynamicExpression、ElementInit、MethodCallExpression、InvocationExpression、NewExpression 和 IndexExpression) 的引數。 此 API 僅供內部使用。

public interface class IArgumentProvider
public interface IArgumentProvider
type IArgumentProvider = interface
Public Interface IArgumentProvider
衍生

備註

您不應該使用這個 API。 它只會因為元件重構而公開,而且只存在於內部效能優化中。 它可啟用兩個可減少樹狀結構大小的優化:

  1. 它可讓節點保留至 , IList<T> 而不是 ReadOnlyCollection<T>。 這可節省為每個節點配置唯讀集合的成本。

  2. 它可建立特製化子類別,以保留特定數目的自變數 (,例如 、Block2Block2Block4) 。 因此,這些節點會避免配置 ReadOnlyCollection<T> 和數位來儲存其元素,因此每個節點儲存 32 個字節。 各種節點會使用這項技術,包括 BlockExpressionInvocationExpressionMethodCallExpression

表達式樹狀節點會繼續公開物件的原始LINQ屬性 ReadOnlyCollection<T> 。 藉由重複使用欄位來儲存數位或通常儲存在陣列中的元素,即可這麼做。

針對陣列案例,集合會輸入為 IList<T> ,而不是 ReadOnlyCollection<T>。 一開始建構節點時,它是陣列。 此連結庫中的編譯程式或公用程式會透過這個介面存取專案。 存取陣列元素會將陣列升階為 ReadOnlyCollection<T>

針對物件案例,第一個自變數會儲存在類型為 Object的欄位中。 一開始建構節點時,此欄位會保留 Expression 第一個自變數的 。 當這個連結庫中的編譯程式和公用程式存取自變數時,它們會再次使用此介面,而第一個自變數的存取子會使用內部 Expression.ReturnObject<T>(System.Object) 協助程式方法來傳回處理 ExpressionReadOnlyCollection<T> 案例的物件。 當使用者存取 ReadOnlyCollection<T>時,物件欄位會更新為直接保留在 上 ReadOnlyCollection<T>

屬性必須 Expression 一致地傳回相同的 ReadOnlyCollection<T>。 否則,表達式訪客所使用的重寫器樹狀結構檢視程式將會中斷。 從 LINQ v1 傳回與相同Expression節點不同的ReadOnlyCollection<T>是重大變更。 目前,用戶可以依賴對象識別來判斷節點是否已變更。 將 ReadOnlyCollection<T> 儲存在多載欄位中會減少記憶體使用量,並維持公用 API 的相容性。

屬性

ArgumentCount

傳回運算式樹狀節點的引數數目。 此 API 僅供內部使用。

方法

GetArgument(Int32)

傳回位於 index 的引數,如果 index 超出範圍則擲回引數。 此 API 僅供內部使用。

適用於