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 - Una lambda nell'albero delle espressioni non deve 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 ad albero non può 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 non può contenere una tupla letterale.
  • CS8144 - Un albero delle espressioni non può 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 non può contenere un elemento 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 pattern System.Index o un accesso indice System.Range.
  • 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 non può contenere una forma espansa di un parametro params di raccolta non di tipo matrice.
  • CS9296 - Un albero delle espressioni potrebbe non contenere un accesso alle proprietà di estensione.
  • CS9307 - Un albero delle espressioni non può contenere una specifica di argomento denominata fuori posizione.
  • CS9369 - Un albero delle espressioni potrebbe non contenere una conversione unione.

Restrizioni sugli alberi di espressione

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 sono vietate perché consentirle comporterebbe una modifica che interrompe la funzionalità di 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:

  • Non è possibile accedere alle proprietà estensione come tali.
  • 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 nei parametri; non può essere sottinteso.
  • La parola chiave __arglist non supportata non è consentita.