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 do assembly e só existe para otimizações de desempenho internas. Ele permite duas otimizações que reduzem o tamanho das árvores:

  1. Ele permite que os nós segurem 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 ativem a 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 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 ReadOnlyCollection<T> o Expression caso. Quando o usuário acessa o ReadOnlyCollection<T>campo de objeto, o campo de objeto é atualizado para manter-se diretamente no ReadOnlyCollection<T>.

É importante que Expression as propriedades retornem consistentemente o mesmo ReadOnlyCollection<T>. Caso contrário, o andador de árvores de reescrita usado pelos visitantes de expressão quebrará. É 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 informar 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

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