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 dell'assembly e 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 anziché un ReadOnlyCollection<T>oggetto . Ciò consente di risparmiare il costo dell'allocazione della raccolta di sola lettura per ogni nodo.

  2. Consente di creare sottoclassi specializzate che contengano un numero specifico di argomenti ( ad esempio , Block2, Block2Block4). Di conseguenza, questi nodi evitano l'allocazione di un oggetto e una ReadOnlyCollection<T> matrice per archiviare gli elementi, salvando quindi 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. Questa operazione viene eseguita riutilizzando un campo per archiviare sia la matrice che un elemento che normalmente viene archiviato nella matrice.

Per il caso della matrice, la raccolta viene digitata 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 in un ReadOnlyCollection<T>oggetto .

Per il caso dell'oggetto, il primo argomento viene archiviato in un campo digitato in Object. Quando il nodo viene inizialmente costruito, questo campo contiene l'oggetto Expression del primo argomento. Quando il compilatore e le utilità in questa libreria accedono agli argomenti, usano nuovamente 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 Expression il caso o ReadOnlyCollection<T> . Quando l'utente accede ReadOnlyCollection<T>al campo , il campo dell'oggetto viene aggiornato per contenere direttamente nell'oggetto ReadOnlyCollection<T>.

È importante che Expression le proprietà restituiscono in modo coerente lo stesso ReadOnlyCollection<T>. In caso contrario, l'albero di riscrizione utilizzato dai visitatori dell'espressione interromperà. Si tratta di una modifica di rilievo da LINQ v1 per restituire diverse ReadOnlyCollection<T> dallo stesso Expression nodo. Attualmente, gli utenti possono basarsi sull'identità dell'oggetto per stabilire se il nodo è cambiato. L'archiviazione dell'oggetto in un campo di overload riduce l'utilizzo ReadOnlyCollection<T> 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