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 de l’assembly, et il existe uniquement pour les optimisations des performances internes. Il permet deux optimisations qui réduisent la taille des arborescences :

  1. Il permet aux nœuds de conserver un 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 de créer des sous-classes spécialisées qui conservent un nombre spécifique d’arguments (par exemple, Block2, Block2, Block4). Par conséquent, ces nœuds évitent d’allouer un ReadOnlyCollection<T> et un 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 de l’arborescence d’expressions continuent d’exposer les propriétés LINQ d’origine des ReadOnlyCollection<T> objets. Pour ce faire, ils réutilisent un champ pour stocker le tableau ou un élément qui serait normalement stocké dans le tableau.

Pour la casse du tableau, la collection est tapée sur IList<T> au lieu 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 .ReadOnlyCollection<T>

Pour la casse 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 du 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 retourner l’objet qui gère le Expression cas ou ReadOnlyCollection<T> . Lorsque l’utilisateur accède à , ReadOnlyCollection<T>le champ d’objet est mis à jour pour conserver directement le ReadOnlyCollection<T>.

Il est important que les Expression propriétés retournent systématiquement le même ReadOnlyCollection<T>. Sinon, le déambulateur d’arbre réécrit utilisé par les visiteurs d’expression se brisera. 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 du dans un champ surchargé réduit l’utilisation de la mémoire et maintient la ReadOnlyCollection<T> 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 à