IArgumentProvider Interface

Definição

Fornece uma interface interna para aceder aos argumentos de múltiplos nós de árvore (DynamicExpression, ElementInit, MethodCallExpression, InvocationExpression, NewExpression e IndexExpression). Esta API é apenas para uso interno.

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

Observações

Não deve usar esta API. É pública apenas devido à refatoração de assembly, e existe apenas para otimizações internas de desempenho. Permite duas otimizações que reduzem o tamanho das árvores:

  1. Permite que os nós mantenham um IList<T> em vez de um ReadOnlyCollection<T>. Isto poupa o custo de alocar a coleção de apenas leitura para cada nó.

  2. Permite criar subclasses especializadas que mantêm um número específico de argumentos (por exemplo, Block2, Block2, Block4). Portanto, estes nós evitam alocar tanto a ReadOnlyCollection<T> como um array para armazenar os seus elementos, poupando assim 32 bytes por nó. Esta técnica é usada por vários nós, incluindo BlockExpression, InvocationExpression, e MethodCallExpression.

Os nós da árvore de expressões continuam a expor as propriedades originais do LINQ dos ReadOnlyCollection<T> objetos. Fazem isto reutilizando um campo para armazenar tanto o array como um elemento que normalmente seria armazenado no array.

Para o caso do array, a coleção é tipada em IList<T> vez de ReadOnlyCollection<T>. Quando o nó é inicialmente construído, é um array. O compilador ou utilitários desta biblioteca acedem aos elementos através desta interface. Aceder a elementos do array promove o array para um ReadOnlyCollection<T>.

No caso do objeto, o primeiro argumento é armazenado num campo tipado em Object. Quando o nó é inicialmente construído, este campo detém o Expression do primeiro argumento. Quando o compilador e as utilitárias desta biblioteca acedem aos argumentos, voltam a usar esta interface, e o acessório para o primeiro argumento usa o método interno Expression.ReturnObject<T>(System.Object) helper para devolver o objeto que gere o Expression caso ou ReadOnlyCollection<T> . Quando o utilizador acede ao ReadOnlyCollection<T>, o campo objeto é atualizado para se manter diretamente no ReadOnlyCollection<T>.

É importante que Expression as propriedades retornem consistentemente o mesmo ReadOnlyCollection<T>. Caso contrário, o rewriter tree walker usado pela expressão visitantes irá quebrar-se. É uma mudança total em relação ao LINQ v1 devolver algo diferente ReadOnlyCollection<T> do mesmo Expression nó. Atualmente, os utilizadores podem confiar na identidade do objeto para saber se o nó mudou. Armazenar o ReadOnlyCollection<T> num campo sobrecarregado reduz o uso de memória e mantém a compatibilidade com a API pública.

Propriedades

Name Description
ArgumentCount

Devolve o número de argumentos ao nó da árvore de expressões. Esta API é apenas para uso interno.

Métodos

Name Description
GetArgument(Int32)

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

Aplica-se a