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 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

Produto Versões
.NET Core 1.0, Core 1.1, Core 2.0, Core 2.1, Core 2.2, Core 3.0, Core 3.1, 5, 6, 7, 8, 9
.NET Framework 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1
.NET Standard 1.3, 1.4, 1.6, 2.0, 2.1
UWP 10.0