Compartilhar via


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). Esta API é somente 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 é público somente 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, , Block4Block2). Portanto, esses nós evitam alocar uma ReadOnlyCollection<T> matriz e 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 como IList<T> em 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 mantém o Expression do primeiro argumento. Quando o compilador e os utilitários nesta biblioteca acessam os argumentos, eles novamente usam 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 Expression caso ou ReadOnlyCollection<T> . Quando o usuário acessa o ReadOnlyCollection<T>, o campo de objeto é atualizado para manter diretamente no ReadOnlyCollection<T>.

É importante que Expression as propriedades retornem consistentemente o mesmo ReadOnlyCollection<T>. Caso contrário, o andador de árvore de reescrita usado pelos visitantes da expressão será interrompido. É uma alteração interruptiva 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 o ReadOnlyCollection<T> em um campo sobrecarregado reduz o uso de memória e mantém a compatibilidade com a API pública.

Propriedades

ArgumentCount

Retorna o número de argumentos para o nó de árvore de expressão. Esta API é somente para uso interno.

Métodos

GetArgument(Int32)

Retorna o argumento no index, gerando se o index estiver fora dos limites. Esta API é somente para uso interno.

Aplica-se a