IArgumentProvider Interfaz

Definición

Proporciona una interfaz interna para acceder a los argumentos de varios nodos de árbol (DynamicExpression, ElementInit, MethodCallExpression, InvocationExpression, NewExpression e IndexExpression). Esta API es solo para uso interno.

public interface class IArgumentProvider
public interface IArgumentProvider
type IArgumentProvider = interface
Public Interface IArgumentProvider
Derivado

Comentarios

No debe usar esta API. Solo es público debido a la refactorización de ensamblados y solo existe para las optimizaciones de rendimiento internas. Habilita dos optimizaciones que reducen el tamaño de los árboles:

  1. Permite que los nodos se mantengan en IList<T> lugar de en .ReadOnlyCollection<T> Esto ahorra el costo de asignar la colección de solo lectura para cada nodo.

  2. Permite crear subclases especializadas que se mantienen en un número específico de argumentos (por ejemplo, Block2, Block2, Block4). Por lo tanto, estos nodos evitan asignar una ReadOnlyCollection<T> matriz y para almacenar sus elementos, lo que ahorra 32 bytes por nodo. Esta técnica se usa en varios nodos, incluidos BlockExpression, InvocationExpressiony MethodCallExpression.

Los nodos de árbol de expresiones continúan exponiendo las propiedades LINQ originales de ReadOnlyCollection<T> los objetos. Para ello, reutilizan un campo para almacenar la matriz o un elemento que normalmente se almacenaría en la matriz.

En el caso de la matriz, la colección se escribe en IList<T> en lugar de ReadOnlyCollection<T>. Cuando el nodo se construye inicialmente, es una matriz. El compilador o las utilidades de esta biblioteca acceden a los elementos a través de esta interfaz. El acceso a los elementos de matriz promueve la matriz a .ReadOnlyCollection<T>

Para el caso del objeto, el primer argumento se almacena en un campo escrito Objecten . Cuando el nodo se construye inicialmente, este campo contiene el Expression del primer argumento. Cuando el compilador y las utilidades de esta biblioteca acceden a los argumentos, vuelven a usar esta interfaz y el descriptor de acceso del primer argumento usa el método auxiliar interno Expression.ReturnObject<T>(System.Object) para devolver el objeto que controla el Expression caso o ReadOnlyCollection<T> . Cuando el usuario accede ReadOnlyCollection<T>a , el campo de objeto se actualiza para que se mantenga directamente en .ReadOnlyCollection<T>

Es importante que Expression las propiedades devuelvan de forma coherente el mismo ReadOnlyCollection<T>. De lo contrario, el caminador de árbol de reescritura usado por los visitantes de expresiones se interrumpirá. Es un cambio importante de LINQ v1 para devolver diferente ReadOnlyCollection<T> del mismo Expression nodo. Actualmente, los usuarios pueden confiar en la identidad de objeto para indicar si el nodo ha cambiado. Almacenar en ReadOnlyCollection<T> un campo sobrecargado reduce el uso de memoria y mantiene la compatibilidad con la API pública.

Propiedades

Nombre Description
ArgumentCount

Devuelve el número de argumentos al nodo de árbol de expresión. Esta API es solo para uso interno.

Métodos

Nombre Description
GetArgument(Int32)

Devuelve el argumento en index, que se produce si index está fuera de los límites. Esta API es solo para uso interno.

Se aplica a