IArgumentProvider Interface

Definição

Fornece uma interface interna para acessar os argumentos de vários nós de árvore (DynamicExpression, ElementInit, MethodCallExpression, InvocationExpression, NewExpression e IndexExpression). Essa API é apenas para uso interno.

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

Comentários

Você não deve usar essa API. Ele só é público devido à refatoração de assembly e existe apenas para otimizações de desempenho internas. Ele habilita duas otimizações que reduzem o tamanho das árvores:

  1. Ele permite que os nós se segurem em um IList<T> em vez de um ReadOnlyCollection<T>. Isso economiza o custo de alocar a coleção somente leitura para cada nó.

  2. Ele permite que subclasses especializadas sejam criadas que se mantêm em um número específico de argumentos (por exemplo, Block2, , Block2, Block4). Portanto, esses nós evitam alocar uma matriz e uma ReadOnlyCollection<T> matriz para armazenar seus elementos, salvando assim 32 bytes por nó. Essa técnica é usada por vários nós, incluindo BlockExpression, InvocationExpressione MethodCallExpression.

Os nós de árvore de expressão continuam a expor as propriedades LINQ originais dos ReadOnlyCollection<T> objetos. Eles fazem isso reutilizando um campo para armazenar a matriz ou um elemento que normalmente seria armazenado na matriz.

Para o caso da matriz, a coleção é digitada em IList<T> vez de ReadOnlyCollection<T>. Quando o nó é inicialmente construído, ele é uma matriz. O compilador ou os utilitários nesta biblioteca acessam os elementos por meio dessa interface. Acessar elementos de matriz promove a matriz para um ReadOnlyCollection<T>.

Para o caso do objeto, o primeiro argumento é armazenado em um campo digitado como Object. Quando o nó é inicialmente construído, esse campo contém o Expression primeiro argumento. Quando o compilador e os utilitários nesta biblioteca acessam os argumentos, eles usam novamente essa interface e o acessador do primeiro argumento usa o método auxiliar interno Expression.ReturnObject<T>(System.Object) para retornar o objeto que manipula o caso ou Expression o ReadOnlyCollection<T> objeto. Quando o usuário acessa o ReadOnlyCollection<T>campo de objeto, ele é atualizado para manter-se diretamente no ReadOnlyCollection<T>.

É importante que Expression as propriedades retornem consistentemente o mesmo ReadOnlyCollection<T>. Caso contrário, o caminhante de árvore de reescrita usado pelos visitantes da expressão será interrompido. É uma alteração significativa do LINQ v1 para retornar diferente ReadOnlyCollection<T> do mesmo Expression nó. Atualmente, os usuários podem confiar na identidade do objeto para saber se o nó foi alterado. Armazenar em ReadOnlyCollection<T> um campo sobrecarregado reduz o uso de memória e mantém a compatibilidade com a API pública.

Propriedades

Nome Description
ArgumentCount

Retorna o número de argumentos para o nó da árvore de expressão. Essa API é apenas para uso interno.

Métodos

Nome Description
GetArgument(Int32)

Retorna o argumento em index, lançando se index estiver fora dos limites. Essa API é apenas para uso interno.

Aplica-se a