IArgumentProvider Interface

Définition

Fournit une interface interne permettant d’accéder aux arguments de plusieurs nœuds d’arborescence (DynamicExpression, ElementInit, MethodCallExpression, InvocationExpression, NewExpression et IndexExpression). Cette API est destinée uniquement à une utilisation interne.

public interface class IArgumentProvider
public interface IArgumentProvider
type IArgumentProvider = interface
Public Interface IArgumentProvider
Dérivé

Remarques

Vous ne devez pas utiliser cette API. Il est public uniquement en raison de la refactorisation d’assembly, et il existe uniquement pour les optimisations de performances internes. Elle permet deux optimisations qui réduisent la taille des arborescences :

  1. Il permet aux nœuds d’avoir une IList<T> conservation au lieu d’un ReadOnlyCollection<T>. Cela permet d’économiser le coût d’allocation de la collection en lecture seule pour chaque nœud.

  2. Il permet de créer des sous-classes spécialisées qui tiennent sur un nombre spécifique d’arguments (par exemple, Block2, , Block2Block4). Par conséquent, ces nœuds évitent d’allouer à la fois un tableau et un ReadOnlyCollection<T> tableau pour stocker leurs éléments, ce qui permet d’économiser 32 octets par nœud. Cette technique est utilisée par différents nœuds, notamment BlockExpression, InvocationExpressionet MethodCallExpression.

Les nœuds d’arborescence d’expressions continuent d’exposer les propriétés LINQ d’origine des ReadOnlyCollection<T> objets. Pour ce faire, réutilisez un champ pour stocker le tableau ou un élément qui serait normalement stocké dans le tableau.

Pour le cas du tableau, la collection est typée à IList<T> la place de ReadOnlyCollection<T>. Lorsque le nœud est initialement construit, il s’agit d’un tableau. Le compilateur ou les utilitaires de cette bibliothèque accèdent aux éléments via cette interface. L’accès aux éléments de tableau promeut le tableau en un ReadOnlyCollection<T>.

Pour le cas de l’objet, le premier argument est stocké dans un champ tapé sur Object. Lorsque le nœud est initialement construit, ce champ contient le Expression premier argument. Lorsque le compilateur et les utilitaires de cette bibliothèque accèdent aux arguments, ils utilisent à nouveau cette interface, et l’accesseur pour le premier argument utilise la méthode d’assistance interne Expression.ReturnObject<T>(System.Object) pour renvoyer l’objet qui gère le ou ReadOnlyCollection<T> le Expression cas. Lorsque l’utilisateur accède au ReadOnlyCollection<T>champ objet, le champ objet est mis à jour pour contenir directement sur le ReadOnlyCollection<T>.

Il est important que Expression les propriétés retournent de façon cohérente le même ReadOnlyCollection<T>. Sinon, le marcheur d’arbre réécrit utilisé par les visiteurs d’expression s’interrompt. Il s’agit d’un changement cassant de LINQ v1 pour retourner différent ReadOnlyCollection<T> du même Expression nœud. Actuellement, les utilisateurs peuvent s’appuyer sur l’identité d’objet pour savoir si le nœud a changé. Le stockage dans ReadOnlyCollection<T> un champ surchargé réduit l’utilisation de la mémoire et maintient la compatibilité pour l’API publique.

Propriétés

Nom Description
ArgumentCount

Retourne le nombre d’arguments au nœud de l’arborescence d’expressions. Cette API est destinée uniquement à une utilisation interne.

Méthodes

Nom Description
GetArgument(Int32)

Retourne l’argument au niveau index, lève si index elle est hors limites. Cette API est destinée uniquement à une utilisation interne.

S’applique à