Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Este artigo aborda os seguintes erros do compilador:
- CS0765 - os métodos parciais com apenas uma declaração de definição ou os 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ões cujo argumento de tipo 'type' não é um tipo delegado.
- CS0838 - uma árvore de expressão não pode conter um inicializador de matriz multidimensional.
- CS0845 - Uma lambda de árvore de expressão não pode conter um operador de coalescência com um literal nulo ou padrão no lado esquerdo.
- 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 utilize 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 árvore de expressão lambda não pode conter um parâmetro
ref,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 não pode conter uma operação dinâmica.
- CS1989 - As expressões lambda assíncronas não podem ser convertidas em árvores de expressões.
- CS2037 - Uma árvore de expressão lambda não pode conter uma chamada COM com a omissão de ref nos argumentos.
- CS7053 - Uma árvore de expressão não pode conter "feature".
- CS8072 - Uma árvore de expressão da expressão lambda não pode conter um operador nulo em propagação.
- CS8074 - Uma árvore de expressão lambda não pode conter um inicializador de dicionário.
-
CS8075 - Um método de extensão
Addnão tem suporte 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 não pode conter um operador de correspondência padrão '
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 expressão lambda da árvore de expressão não pode conter uma chamada para um método, uma propriedade ou um indexador que retorna por referência.
- CS8155 - Expressões lambda que retornam por referência não podem ser convertidas para árvores de expressão.
- CS8188 - A á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 um operador de tupla
==ou!=. - CS8514 - Uma árvore de expressão não pode conter uma expressão switch.
- CS8640 - a árvore de expressão não pode conter valor de estrutura de referência ou tipo restrito.
- CS8642 - uma árvore de expressão não pode conter uma atribuição coalescente nula.
- CS8790 - uma árvore de expressão não pode conter um padrão System.Index ou System.Range de acesso ao indexador.
-
CS8791 - Uma árvore de expressão não pode conter uma expressão de índice a partir do final ('
^'). -
CS8792 - uma árvore de expressão não pode conter um intervalo de expressão ('
..'). -
CS8810 - '
&' em grupos de métodos não pode ser usado em árvores de expressões. -
CS8849 - uma árvore de expressão não pode conter uma -expression
with. - CS8927 - uma árvore de expressão não pode conter um acesso a um membro de interface virtual estático ou abstrato.
- CS8952 - Uma árvore de expressão não pode conter uma conversão de manipulador de string 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 ou conversão de array embutido.
- CS9175 - uma árvore de expressão não pode conter uma expressão de coleção.
- CS9226 - Uma árvore de expressão pode não conter uma forma expandida de parâmetro de coleção de params não de matriz.
- CS9296 - Uma árvore de expressão não pode conter um acesso a uma propriedade de extensão.
- CS9307 - Uma árvore de expressão pode não conter uma especificação de argumento nomeado fora de posição.
- CS9369 - Uma árvore de expressão pode não conter uma conversão de união.
Restrições da árvore de expressão
Todos os erros da lista anterior indicam que você deve ter usado um tipo de expressão do C# que não é permitido em uma árvore de expressão. Na maioria dos casos, as expressões proibidas representam a sintaxe introduzida após o C# 3.0. Essas expressões são proibidas porque sua permissão criaria uma mudança disruptiva em todas as bibliotecas que analisam árvores de expressão. Todas as bibliotecas precisariam ser aprimoradas para analisar as novas expressões do C# se as construções mais recentes fossem permitidas.
As seguintes expressões são proibidas:
- Invocações de métodos parciais que não tenham uma declaração de implementação.
- Invocações de métodos condicionais que foram removidos.
- Invocações de funções locais.
- Expressões lambda
asyncnão são permitidas. - Usar o acesso
basepara chamar diretamente um método virtual declarado em uma classe base. - Operações de atribuição.
- lambdas de instruções não são permitidas.
- Inicializadores de matriz multidimensional. Em vez disso, você deve criar e inicializar uma matriz multidimensional fora da árvore de expressão.
-
dynamicoperações não são permitidas. - Não são permitidas expressões de correspondência de padrões.
- Literais de tupla e muitas operações de tupla, como comparações de igualdade, não são permitidas.
- As expressões
thrownão são permitidas. -
descartar (
_) declarações. - Os operadores índice e intervalo não são permitidos.
- A mutação não destrutiva utilizando expressões
withnão é permitida. - Não é possível declarar ou acessar matrizes inline.
- Não é possível incluir expressões de coleção.
- Conversões de união não são permitidas.
- Os operadores propagação nula e coalescência nula não são permitidos.
- Tipos
ref struct, como System.Span<T> e System.ReadOnlySpan<T>, não são permitidos. - Parâmetros
in,outeref, incluindo declarações de variáveisout, não são permitidos. - Retornos de
refnão são permitidos. - Chamadas para métodos que retornam por
refnão são permitidas. - Os membros estáticos de interface abstrata não podem ser acessados.
- Matrizes embutidas.
- O modificador
paramsé permitido somente em matrizes unidimensionais. Outros tipos de coleção não são permitidos.
Outras restrições são:
- Propriedades de extensão não podem ser acessadas como extensões.
- Atributos não podem ser aplicados à expressão lambda, aos parâmetros ou ao retorno.
- A expressão lambda deve ser conversível em um tipo derivado de System.Linq.Expressions.Expression cujo parâmetro de tipo seja um tipo delegado.
- Os parâmetros nomeados e opcionais são restritos. A expressão não pode chamar um método que especifique os argumentos chamados e não pode utilizar o valor padrão de um parâmetro opcional.
-
Inicializadores de dicionário não são permitidos. Métodos de extensão
Addtambém não são. - 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 é.
- Não são permitidas operações inseguras com ponteiros.
- Chamadas COM devem incluir
refem argumentos; isso não pode ser implícito. - A palavra-chave
__arglistnão suportada não é permitida.