Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
Este artigo aborda os seguintes erros do compilador:
- CS0765 - Métodos parciais com apenas uma declaração definidora ou métodos condicionais removidos não podem ser usados em árvores de expressão.
- CS0831 - Uma árvore de expressão não pode conter um acesso base.
- CS0832 - Uma árvore de expressão não pode conter um operador de atribuição
- CS0834 - Uma expressão lambda com um corpo de instrução não pode ser convertida em uma árvore de expressão.
- CS0835 - Não é possível converter lambda em uma árvore de expressão cujo argumento de tipo 'type' não é um tipo delegado.
- CS0838 - Uma árvore de expressão pode não conter um inicializador de matriz multidimensional.
- CS0845 - Uma árvore de expressão lambda não pode conter um operador coalescing com um lado esquerdo literal nulo ou padrão.
- CS0853 - Uma árvore de expressão não pode conter uma especificação de argumento nomeado.
- CS0854 - Uma árvore de expressão não pode conter uma chamada ou invocação que usa argumentos opcionais.
- CS0855 - Uma árvore de expressão não pode conter uma propriedade indexada.
- CS1944 - Uma árvore de expressão não pode conter uma operação de ponteiro insegura.
- CS1945 - Uma árvore de expressão não pode conter uma expressão de método anônimo.
- CS1946 - Uma expressão de método anônimo não pode ser convertida em uma árvore de expressão.
-
CS1951 - Uma lambda de árvore de expressão não pode conter um
refparâmetro ,inouout. - CS1952 - Uma árvore de expressão lambda não pode conter um método com argumentos variáveis.
- CS1963 - Uma árvore de expressão pode não conter uma operação dinâmica.
- CS1989 - As expressões lambda assíncronas não podem ser convertidas em árvores de expressão.
- CS2037 - Uma árvore de expressão lambda não pode conter uma chamada COM com ref omitida em argumentos.
- CS7053 - Uma árvore de expressão pode não conter "feature".
- CS8072 - Uma árvore de expressão lambda não pode conter um operador de propagação nulo.
- CS8074 - Uma árvore de expressão lambda pode não conter um inicializador de dicionário.
-
CS8075 - Um método de extensão
Addnão é suportado para um inicializador de coleção em uma expressão lambda. - CS8110 - Uma árvore de expressão não pode conter uma referência a uma função local.
-
CS8122 - Uma árvore de expressão pode não conter um operador de correspondência de padrões '
is'. - CS8143 - Uma árvore de expressão não pode conter um literal de tupla.
- CS8144 - Uma árvore de expressão não pode conter uma conversão de tupla.
- CS8153 - Uma árvore de expressão lambda não pode conter uma chamada para um método, propriedade ou indexador que retorna por referência.
- CS8155 - As expressões do Lambda que retornam por referência não podem ser convertidas em árvores de expressão.
- CS8188 - Uma árvore de expressão não pode conter uma expressão throw.
- CS8198 - Uma árvore de expressão não pode conter uma declaração de variável de argumento de saída.
- CS8207 - Uma árvore de expressão não pode conter um descarte.
-
CS8382 - Uma árvore de expressão não pode conter uma tupla ou um operador
==!=. - CS8514 - Uma árvore de expressão pode não conter uma expressão de opção.
- CS8640 - árvore de expressão não pode conter valor de ref struct ou tipo restrito.
- CS8642 - Uma árvore de expressão não pode conter uma atribuição de coalescência nula.
- CS8790 - Uma árvore de expressão não pode conter um padrão System.Index ou acesso ao System.Range indexador.
-
CS8791 - Uma árvore de expressão não pode conter uma expressão de índice a partir do fim ('
^'). -
CS8792 - Uma árvore de expressão não pode conter uma expressão de intervalo ('
..'). -
CS8810 - '
&' em grupos de métodos não pode ser usado em árvores de expressão. -
CS8849 - Uma árvore de expressão não pode conter uma expressão de tipo
with. - CS8927 - Uma árvore de expressão não pode conter um acesso de membro estático da interface virtual ou abstrata.
- CS8952 - Uma árvore de expressão não pode conter uma conversão de manipulador de cadeia de caracteres interpolada.
- CS8972 - Uma expressão lambda com atributos não pode ser convertida em uma árvore de expressão.
- CS9170 - Uma árvore de expressão não pode conter um acesso a matriz ou conversão em linha.
- CS9175 - Uma árvore de expressão não pode conter uma expressão de coleção.
- CS9226 - Uma árvore de expressão não pode conter uma forma expandida de parâmetro de coleção de parâmetros que não seja uma matriz.
- CS9296 - Uma árvore de expressões pode não conter uma propriedade alargada ou acesso ao indexador.
- CS9307 - Uma árvore de expressão não pode conter uma especificação de argumento nomeado fora de posição.
- CS9369 - Uma árvore de expressões não pode conter uma conversão de união.
Restrições da árvore de expressões
Todos os erros na lista anterior indicam que usou um tipo de expressão em C# que não é permitido numa árvore de expressões. Na maioria dos casos, as expressões proibidas representam sintaxe introduzida após C# 3.0. Essas expressões são proibidas porque permitir que elas criaria uma alteração incompatível em todas as bibliotecas que analisam árvores de expressão. Todas as bibliotecas precisariam ser aprimoradas para analisar novas expressões C# se construções mais recentes fossem permitidas.
São proibidas as seguintes expressões:
- Invocações de métodos parciais que não têm uma declaração de implementação.
- Invocações de métodos condicionais que foram removidos.
- Invocação de funções locais.
-
asyncexpressões lambda. - Usando
basepara chamar diretamente um método virtual declarado numa classe base. - operações de atribuição.
- lambdas de instrução.
- inicializadores de matriz multidimensional. Em vez disso, cria e inicializa um array multidimensional fora da árvore de expressões.
-
dynamicoperações. - Expressões de correspondência de padrões.
- Literais de tuplas e muitas operações de tuplas, como comparações de igualdade.
-
throwexpressões. -
descartar (
_) declarações. - Os operadores de índice e alcance .
- Mutação não destrutiva usando
withexpressões. - Declarar ou aceder a arrays inline.
- Incluindo expressões de coleção.
- Conversões de união.
- Os operadores de propagação de null e de coalescência de null.
-
ref structtipos, como System.Span<T> e System.ReadOnlySpan<T>. -
in,outerefparâmetros, incluindo declarações de variáveisout. -
refdevoluções. - Chamadas a métodos que devolvem por
ref. - Aceder a membros de interface estáticos abstratos.
- Matrizes em linha.
- O
paramsmodificador em qualquer coisa que não sejam arrays unidimensionais.
Outras restrições são:
- Não é possível aceder a propriedades de extensões e indexadores como extensões.
- Não é possível aplicar atributos à expressão lambda, aos seus parâmetros ou ao valor de retorno.
- A expressão lambda deve ser convertível em um tipo derivado de System.Linq.Expressions.Expression cujo parâmetro type é um tipo delegado.
- Parâmetros nomeados e opcionais restritos. A expressão não pode chamar um método especificando argumentos nomeados e não pode usar o valor padrão de um parâmetro opcional.
- Não é possível usar inicializadores de dicionário nem métodos de extensão
Add. - A expressão de destino deve ser uma expressão lambda. Constantes e variáveis não são permitidas, mas uma expressão lambda que retorna uma constante ou variável é.
- Operações de ponteiro inseguras não são permitidas.
- As chamadas COM devem incluir
refnos argumentos, não podendo ser subentendido. - A palavra-chave
__arglistnão suportada.