Condividi tramite


Risolvere gli errori e gli avvisi generati dalle espressioni vietate negli alberi delle espressioni

Questo articolo illustra gli errori del compilatore seguenti:

  • CS0765 - I metodi parziali con solo una dichiarazione di definizione o metodi condizionali rimossi non possono essere usati negli alberi delle espressioni.
  • CS0831 - Un albero delle espressioni potrebbe non contenere un accesso di base.
  • CS0832 - Un albero delle espressioni non può contenere un operatore di assegnazione
  • CS0834 - Un'espressione lambda con un corpo dell'istruzione non può essere convertita in un albero delle espressioni.
  • CS0835 - Impossibile convertire lambda in un albero delle espressioni il cui argomento tipo 'type' non è un tipo delegato.
  • CS0838 - Un albero delle espressioni potrebbe non contenere un inizializzatore di matrice multidimensionale.
  • CS0845 - Un'espressione lambda dell’albero delle espressioni potrebbe non contenere un operatore di coalescenza con un valore letterale null o predefinito a sinistra.
  • CS0853 - Un albero delle espressioni potrebbe non contenere una specifica di argomento denominata.
  • CS0854 - Un albero delle espressioni potrebbe non contenere una chiamata o un’invocazione che usa argomenti facoltativi.
  • CS0855 - Un albero delle espressioni potrebbe non contenere una proprietà indicizzata.
  • CS1944 - Un albero delle espressioni potrebbe non contenere un'operazione di puntatore non sicura.
  • CS1945 - Un albero delle espressioni potrebbe non contenere un'espressione di metodo anonimo.
  • CS1946 - Un'espressione di metodo anonimo non può essere convertita in un albero delle espressioni.
  • CS1951 - Un'espressione lambda dell'albero delle espressioni potrebbe non contenere un parametro ref, in o out.
  • CS1952 - Un'espressione lambda dell'albero delle espressioni potrebbe non contenere un metodo con argomenti variabili.
  • CS1963 - Un albero delle espressioni potrebbe non contenere un'operazione dinamica.
  • CS1989 - Le espressioni lambda asincrone non possono essere convertite in alberi delle espressioni.
  • CS2037 - Un'espressione lambda dell'albero delle espressioni potrebbe non contenere una chiamata COM con ref omesso sugli argomenti.
  • CS7053 - Un albero delle espressioni potrebbe non contenere una "funzionalità".
  • CS8072 - Un'espressione lambda dell'albero delle espressioni potrebbe non contenere un operatore di propagazione Null.
  • CS8074 - Un'espressione lambda dell'albero delle espressioni potrebbe non contenere un inizializzatore di dizionario.
  • CS8075 - Un metodo di estensione Add non è supportato per un inizializzatore di raccolta in un'espressione lambda.
  • CS8110 - Un albero delle espressioni potrebbe non contenere un riferimento a una funzione locale.
  • CS8122 - Un albero delle espressioni potrebbe non contenere un operatore di corrispondenza dei criteri 'is'.
  • CS8143 - Un albero delle espressioni potrebbe non contenere un valore letterale di tupla.
  • CS8144 - Un albero delle espressioni potrebbe non contenere una conversione di tupla.
  • CS8153 - Un'espressione lambda dell'albero delle espressioni potrebbe non contenere una chiamata a un metodo, una proprietà o un indicizzatore che restituisce per riferimento.
  • CS8155 - Le espressioni lambda restituite dal riferimento non possono essere convertite in alberi delle espressioni.
  • CS8188 - Un albero delle espressioni potrebbe non contenere un'espressione throw.
  • CS8198 - Un albero delle espressioni potrebbe non contenere una dichiarazione di variabile di argomento out.
  • CS8207 - Un albero delle espressioni potrebbe non contenere un'eccezione.
  • CS8382 - Un albero delle espressioni potrebbe non contenere un == di tupla o un operatore !=.
  • CS8514 - Un albero delle espressioni potrebbe non contenere un'espressione switch.
  • CS8640 - Un albero delle espressioni non può contenere un valore di tipo ref struct o con restrizioni.
  • CS8642 - Un albero delle espressioni potrebbe non contenere un'assegnazione di coalescenza null.
  • CS8790 - Un albero delle espressioni potrebbe non contenere un System.Index di criteri o un accesso System.Range indicizzatore.
  • CS8791 - Un albero delle espressioni non può contenere un'espressione di indice from-end ('^').
  • CS8792 - Un albero delle espressioni potrebbe non contenere un'espressione di intervallo ('..').
  • CS8810 - '&' nei gruppi di metodi non può essere usato negli alberi delle espressioni.
  • CS8849 - Un albero delle espressioni potrebbe non contenere un'espressione with.
  • CS8927 - Un albero delle espressioni potrebbe non contenere un accesso a un membro di interfaccia virtuale o astratta statico.
  • CS8952 - Un albero delle espressioni potrebbe non contenere una conversione del gestore di stringhe interpolata.
  • CS8972 - Un'espressione lambda con attributi non può essere convertita in un albero delle espressioni.
  • CS9170 - Un albero delle espressioni potrebbe non contenere un accesso o una conversione di matrici inline.
  • CS9175 - Un albero delle espressioni potrebbe non contenere un'espressione di raccolta.
  • CS9226 - Un albero delle espressioni potrebbe non contenere una forma espansa di parametro di raccolta params non di matrice.

Restrizioni agli alberi delle espressioni

Tutti gli errori nell'elenco precedente indicano che è stato usato un tipo di espressione C# non consentito in un albero delle espressioni. Nella maggior parte dei casi, le espressioni non consentite rappresentano la sintassi introdotta dopo C# 3.0. Queste espressioni non sono consentite perché consentono di creare una modifica che causa un'interruzione in tutte le librerie che analizzano gli alberi delle espressioni. Tutte le librerie devono essere migliorate per analizzare le nuove espressioni C# se sono consentiti costrutti più recenti.

Le espressioni seguenti non sono consentite:

Altre restrizioni sono:

  • Gli attributi non possono essere applicati all'espressione lambda, ai relativi parametri o restituiti.
  • L'espressione lambda deve essere convertibile in un tipo derivato da System.Linq.Expressions.Expression il cui parametro di tipo è un tipo delegato.
  • I parametri denominati e facoltativi sono limitati. L'espressione non può chiamare un metodo che specifica argomenti denominati e non può usare il valore predefinito di un parametro facoltativo.
  • Gli inizializzatori di dizionario non sono consentiti. Non sono nemmeno metodi di estensione Add.
  • L'espressione di destinazione deve essere un'espressione lambda. Le costanti e le variabili non sono consentite, ma un'espressione lambda che restituisce una costante o una variabile sì.
  • Le operazioni dei puntatori non sicure non sono consentite.
  • Le chiamate COM devono includere ref sugli argomenti; non può essere implicito.
  • La parola chiave __arglist non supportata non è consentita.