Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Questo articolo illustra gli errori e gli avvisi del compilatore seguenti:
- CS8108: Impossibile passare un argomento di tipo dinamico al parametro params 'parameter' della funzione locale 'method'.
- CS8112: la funzione locale 'method' deve dichiarare un corpo perché non è contrassegnato come 'static extern'.
- CS8321: la funzione locale 'method' viene dichiarata ma mai usata
- CS8421: una funzione locale statica non può contenere un riferimento a 'variable'.
- CS8422: una funzione locale statica non può contenere un riferimento a 'this' o 'base'.
Le funzioni locali sono state aggiunte in C# 7.0. Consentono di dichiarare metodi di supporto all'interno di un altro membro. La diagnostica in questo articolo illustra le dichiarazioni di funzioni locali, le chiamate, l'utilizzo e le restrizioni di acquisizione aggiuntive per static le funzioni locali.
Corpi delle funzioni locali
- CS8112: la funzione locale 'method' deve dichiarare un corpo perché non è contrassegnato come 'static extern'.
Una dichiarazione di funzione locale deve includere un corpo a meno che la funzione locale non sia dichiarata static extern. Aggiungi un corpo di blocco o un corpo di espressione alla funzione locale. Se l'implementazione viene fornita esternamente, contrassegnare la funzione static extern locale e assicurarsi che la dichiarazione segua le regole per i metodi esterni.
Parametri params e argomenti dinamici
- CS8108: impossibile passare l'argomento con tipo dinamico al parametro 'parameter' della funzione locale 'method'.
Una chiamata di funzione locale non può passare un dynamic argomento a un params parametro. Convertire il valore nel tipo di elemento o nel tipo di matrice previsto dal params parametro prima della chiamata. È anche possibile archiviare i valori in una matrice tipizzata in modo esplicito e passare tale matrice alla funzione locale.
Funzioni locali inutilizzate
- CS8321: la funzione locale 'method' viene dichiarata ma mai usata
Il compilatore segnala questo avviso quando si dichiara una funzione locale ma nessun codice raggiungibile la chiama. Rimuovere la funzione locale inutilizzata o chiamarla dal membro che la contiene. Se si intende usare la funzione locale in una modifica futura, mantenerla fuori dall'origine fino a quando non è necessaria.
Le funzioni locali statiche non possono acquisire lo stato
- CS8421: una funzione locale statica non può contenere un riferimento a 'variable'.
- CS8422: una funzione locale statica non può contenere un riferimento a 'this' o 'base'.
Una static funzione locale non può acquisire lo stato dall'ambito di inclusione. Non può fare riferimento, tramite this, a variabili locali del contesto esterno, parametri, membri dell'istanza oppure a this stesso. Passare ogni valore necessario per la funzione locale come parametro (CS8421, CS8422). Se la funzione locale deve accedere a variabili o allo stato dell'istanza dall'ambito esterno, rimuovere il modificatore static.
L'esempio seguente mostra i riferimenti che causano CS8422:
public class C
{
private int counter = 1;
public void IncreaseCounter()
{
static void LocalFunc(int addition)
{
this.counter += addition; // CS8422
base.ToString(); // CS8422
counter += addition; // CS8422: implicit this
ToString(); // CS8422: implicit base
}
LocalFunc(10);
}
}
Per correggere CS8422, passare i dati dell'istanza necessari alla funzione locale, spostare l'helper all'esterno del contesto dell'istanza o rimuovere static quando la funzione locale deve accedere allo stato dell'istanza.
Diagnostica correlata
- Per altre informazioni sulle funzioni locali negli alberi delle espressioni, vedere Alcune espressioni non sono consentite negli alberi delle espressioni nei messaggi del compilatore C#.
- Per altre informazioni sulle funzioni locali con parametri di tipo generico, vedere Risolvere gli errori e gli avvisi correlati ai parametri di tipo generici e agli argomenti di tipo nei messaggi del compilatore C#.
- Per altre informazioni sugli attributi sulle funzioni locali, vedere Risolvere gli errori e gli avvisi che coinvolgono la dichiarazione degli attributi e l'uso degli attributi nel codice nei messaggi del compilatore C#.
- Per altre informazioni sulle variabili acquisite nelle funzioni anonime, vedere Errori e avvisi delle espressioni lambda nei messaggi del compilatore C#.
- Per altre informazioni sulle acquisizioni nei costruttori e nei costruttori primari, vedere Risolvere gli errori correlati alle dichiarazioni del costruttore e agli inizializzatori di moduli nei messaggi del compilatore C#.