IArgumentProvider Interface

Définition

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

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. Il permet deux optimisations qui réduisent la taille des arbres :

  1. Il permet aux nœuds d’avoir une conservation IList<T> 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 aux sous-classes spécialisées d’être créées qui sont conservées sur un nombre spécifique d’arguments (par exemple, Block2, Block2, Block4). Par conséquent, ces nœuds évitent d’allouer à la fois un ReadOnlyCollection<T> tableau et un tableau pour stocker leurs éléments, ce qui enregistre 32 octets par nœud. Cette technique est utilisée par différents nœuds, notamment BlockExpression, InvocationExpressionet MethodCallExpression.

Les nœuds de l’arborescence d’expressions continuent d’exposer les propriétés LINQ d’origine des ReadOnlyCollection<T> objets. Ils effectuent cela en réutilisant un champ pour stocker à la fois le tableau ou un élément qui serait normalement stocké dans le tableau.

Pour le cas de 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 favorise le tableau en un ReadOnlyCollection<T>.

Pour le cas d’objet, le premier argument est stocké dans un champ typé 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 ou Expression ReadOnlyCollection<T> cas. Lorsque l’utilisateur accède au ReadOnlyCollection<T>champ objet, le champ objet est mis à jour pour tenir directement sur le ReadOnlyCollection<T>.

Il est important que Expression les propriétés retournent constamment le même ReadOnlyCollection<T>. Sinon, le marcheur de l’arbre réécriture 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 indiquer 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

ArgumentCount

Retourne le nombre d’arguments du nœud d’arborescence d’expression. Cette API est destinée à un usage interne uniquement.

Méthodes

GetArgument(Int32)

Retourne l’argument à l’index, en levant une exception si l’index est hors limites. Cette API est destinée à un usage interne uniquement.

S’applique à