IArgumentProvider Interfaccia

Definizione

Offre un'interfaccia interna per l'accesso agli argomenti di più nodi dell'albero (DynamicExpression, ElementInit, MethodCallExpression, InvocationExpression, NewExpression e IndexExpression). Questa API è solo per uso interno.

public interface class IArgumentProvider
public interface IArgumentProvider
type IArgumentProvider = interface
Public Interface IArgumentProvider
Derivato

Commenti

Non usare questa API. È pubblico solo a causa del refactoring degli assembly ed esiste solo per le ottimizzazioni delle prestazioni interne. Consente due ottimizzazioni che riducono le dimensioni degli alberi:

  1. Consente ai nodi di tenere premuto un IList<T> oggetto invece di un oggetto ReadOnlyCollection<T>. In questo modo si risparmia il costo dell'allocazione della raccolta di sola lettura per ogni nodo.

  2. Consente di creare sottoclassi specializzate che contengono un numero specifico di argomenti ( ad esempio , Block2, Block2``Block4). Pertanto, questi nodi evitano l'allocazione di una ReadOnlyCollection<T> matrice e per l'archiviazione dei relativi elementi, salvando così 32 byte per nodo. Questa tecnica viene usata da vari nodi, tra cui BlockExpression, InvocationExpressione MethodCallExpression.

I nodi dell'albero delle espressioni continuano a esporre le proprietà LINQ originali degli ReadOnlyCollection<T> oggetti. A tale scopo, riusare un campo per archiviare sia la matrice che un elemento che normalmente verrebbe archiviato nella matrice.

Nel caso della matrice, la raccolta viene tipizzata invece IList<T> di ReadOnlyCollection<T>. Quando il nodo viene inizialmente costruito, si tratta di una matrice. Il compilatore o le utilità in questa libreria accedono agli elementi tramite questa interfaccia. L'accesso agli elementi della matrice promuove la matrice a un oggetto ReadOnlyCollection<T>.

Per il caso dell'oggetto, il primo argomento viene archiviato in un campo tipizzato in Object. Quando il nodo viene inizialmente costruito, questo campo contiene il Expression del primo argomento. Quando il compilatore e le utilità in questa libreria accedono agli argomenti, usano di nuovo questa interfaccia e la funzione di accesso per il primo argomento usa il metodo helper interno Expression.ReturnObject<T>(System.Object) per restituire l'oggetto che gestisce il Expression case o ReadOnlyCollection<T> . Quando l'utente accede a ReadOnlyCollection<T>, il campo dell'oggetto viene aggiornato in modo da contenere direttamente nell'oggetto ReadOnlyCollection<T>.

È importante che Expression le proprietà restituisca in modo coerente lo stesso ReadOnlyCollection<T>. In caso contrario, l'albero di rewriter utilizzato dai visitatori dell'espressione si interromperà. Si tratta di una modifica che causa un'interruzione da LINQ v1 per restituire differenze ReadOnlyCollection<T> rispetto allo stesso Expression nodo. Attualmente, gli utenti possono basarsi sull'identità dell'oggetto per stabilire se il nodo è stato modificato. L'archiviazione di ReadOnlyCollection<T> in un campo di overload riduce l'utilizzo della memoria e mantiene la compatibilità per l'API pubblica.

Proprietà

ArgumentCount

Restituisce il numero di argomenti per il nodo della struttura ad albero dell'espressione. Questa API è solo per uso interno.

Metodi

GetArgument(Int32)

Restituisce l'argomento in corrispondenza di index, generando un'eccezione se index non è compreso nell'intervallo. Questa API è solo per uso interno.

Si applica a