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).Provides an internal interface for accessing the arguments of multiple tree nodes (DynamicExpression, ElementInit, MethodCallExpression, InvocationExpression, NewExpression, and IndexExpression). Cette API est destinée à un usage interne uniquement.This API is for internal use only.

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

Remarques

Vous ne devez pas utiliser cette API.You should not use this API. Il est public uniquement en raison de la refactorisation de l’assembly, et il existe uniquement pour optimiser les performances internes.It is public only due to assembly refactoring, and it exists only for internal performance optimizations. Il permet deux optimisations qui réduisent la taille des arborescences :It enables two optimizations that reduce the size of the trees:

  1. Il permet aux nœuds à maintenir un IList<T> au lieu d’un ReadOnlyCollection<T>.It enables the nodes to hold onto an IList<T> instead of a ReadOnlyCollection<T>. Cela permet d’économiser le coût d’allouer de la collection en lecture seule pour chaque nœud.This saves the cost of allocating the read-only collection for each node.

  2. Il permet les sous-classes spécialisées à créer ce blocage sur un nombre spécifique d’arguments (par exemple, Block2, Block2, Block4).It enables specialized subclasses to be created that hold on to a specific number of arguments (for example, Block2, Block2, Block4). Par conséquent, ces nœuds évitent l’allocation à la fois un ReadOnlyCollection<T> et un tableau pour stocker leurs éléments, ce qui évite de 32 octets par nœud.Therefore, these nodes avoid allocating both a ReadOnlyCollection<T> and an array for storing their elements, thus saving 32 bytes per node. Cette technique est utilisée par différents nœuds, y compris BlockExpression, InvocationExpression, et MethodCallExpression.This technique is used by various nodes, including BlockExpression, InvocationExpression, and MethodCallExpression.

Les nœuds d’arbre expression continuent d’exposer les propriétés LINQ d’origine de ReadOnlyCollection<T> objets.The expression tree nodes continue to expose the original LINQ properties of ReadOnlyCollection<T> objects. Pour cela, ils réutilisation d’un champ pour stocker le tableau ou un élément qui serait normalement stocké dans le tableau.They do this by reusing a field for storing both the array or an element that would normally be stored in the array.

Dans le cas du tableau, la collection est de type IList<T> au lieu de ReadOnlyCollection<T>.For the array case, the collection is typed to IList<T> instead of ReadOnlyCollection<T>. Quand le nœud est initialement créé, il s’agit d’un tableau.When the node is initially constructed, it is an array. Le compilateur ou les utilitaires dans cette bibliothèque accéder aux éléments via cette interface.The compiler or utilities in this library access the elements through this interface. L’accès aux éléments du tableau promeut le tableau en un ReadOnlyCollection<T>.Accessing array elements promotes the array to a ReadOnlyCollection<T>.

Dans le cas de l’objet, le premier argument est stocké dans un champ de type Object.For the object case, the first argument is stored in a field typed to Object. Quand le nœud est initialement créé, ce champ conserve le Expression du premier argument.When the node is initially constructed, this field holds the Expression of the first argument. Lorsque le compilateur et les utilitaires dans cette bibliothèque accéder aux arguments, ils utilisent à nouveau cette interface, et l’accesseur pour le premier argument utilise interne Expression.ReturnObject<T>(System.Object) méthode d’assistance pour retourner l’objet qui gère la Expression ou ReadOnlyCollection<T> cas.When the compiler and utilities in this library access the arguments, they again use this interface, and the accessor for the first argument uses the internal Expression.ReturnObject<T>(System.Object) helper method to return the object that handles the Expression or ReadOnlyCollection<T> case. Lorsque l’utilisateur accède à la ReadOnlyCollection<T>, le champ objet est mis à jour pour conserver directement la ReadOnlyCollection<T>.When the user accesses the ReadOnlyCollection<T>, the object field is updated to hold directly onto the ReadOnlyCollection<T>.

Il est important que Expression propriétés retournent de manière cohérente les mêmes ReadOnlyCollection<T>.It is important that Expression properties consistently return the same ReadOnlyCollection<T>. Sinon, l’analyseur d’arborescence de module de réécriture utilisé par les visiteurs de l’expression sera interrompue.Otherwise, the rewriter tree walker used by expression visitors will break. Il s’agit d’une modification avec rupture de la version v1 LINQ pour retourner différents ReadOnlyCollection<T> à partir de la même Expression nœud.It is a breaking change from LINQ v1 to return different ReadOnlyCollection<T> from the same Expression node. Actuellement, les utilisateurs peuvent compter sur l’identité de l’objet pour indiquer si le nœud a changé.Currently, users can rely on object identity to tell if the node has changed. Stocker le ReadOnlyCollection<T> dans un champ surchargé à la fois réduit l’utilisation de mémoire et maintient la compatibilité pour l’API publique.Storing the ReadOnlyCollection<T> in an overloaded field both reduces memory usage and maintains compatibility for the public API.

Propriétés

ArgumentCount

Retourne le nombre d’arguments du nœud d’arborescence d’expression.Returns the number of arguments to the expression tree node. Cette API est destinée à un usage interne uniquement.This API is for internal use only.

Méthodes

GetArgument(Int32)

Retourne l’argument à l’index, en levant une exception si l’index est hors limites.Returns the argument at index, throwing if index is out of bounds. Cette API est destinée à un usage interne uniquement.This API is for internal use only.

S’applique à