Kommentar
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Den här artikeln beskriver följande kompilatorfel och varningar:
- CS8108: Det går inte att skicka argument med dynamisk typ till paramsparametern "parameter" för den lokala funktionen "method".
- CS8112: Den lokala funktionen "method" måste deklarera en brödtext eftersom den inte har markerats som "statisk extern".
- CS8321: Den lokala funktionen "method" deklareras men används aldrig
- CS8421: En statisk lokal funktion kan inte innehålla en referens till variabeln.
- CS8422: En statisk lokal funktion får inte innehålla en referens till "this" eller "base".
Lokala funktioner har lagts till i C# 7.0. De låter dig deklarera hjälpmetoder inuti en annan medlem. Diagnostiken i den här artikeln beskriver lokala funktionsdeklarationer, anrop, användning och de extra avbildningsbegränsningarna för static lokala funktioner.
Lokala funktionsorgan
- CS8112: Den lokala funktionen "method" måste deklarera en brödtext eftersom den inte har markerats som "statisk extern".
En lokal funktionsdeklaration måste innehålla en brödtext om inte den lokala funktionen deklareras static extern. Lägg till en blocktext eller en uttryckstext i den lokala funktionen. Om implementeringen tillhandahålls externt markerar du den lokala funktionen static extern och ser till att deklarationen följer reglerna för externa metoder.
Paramsparametrar och dynamiska argument
- CS8108: Det går inte att skicka argument med dynamisk typ till paramsparametern "parameter" för den lokala funktionen "method".
Ett lokalt funktionsanrop kan inte skicka ett dynamic argument till en params parameter. Konvertera värdet till den elementtyp eller matristyp som förväntas av parametern params före anropet. Du kan också lagra värdena i en explicit typad matris och skicka den matrisen till den lokala funktionen.
Oanvända lokala funktioner
- CS8321: Den lokala funktionen "method" deklareras men används aldrig
Kompilatorn rapporterar den här varningen när du deklarerar en lokal funktion men ingen nåbar kod anropar den. Ta bort den oanvända lokala funktionen eller anropa den från den omslutande medlemmen. Om du tänker använda den lokala funktionen i en framtida ändring ska du hålla den borta från källan tills den behövs.
Statiska lokala funktioner kan inte avbilda tillstånd
- CS8421: En statisk lokal funktion kan inte innehålla en referens till variabeln.
- CS8422: En statisk lokal funktion får inte innehålla en referens till "this" eller "base".
En static lokal funktion kan inte samla in tillstånd från omfånget som omsluter. Den kan inte referera till omslutande lokala variabler, parametrar eller instansmedlemmar via this eller this självt. Skicka varje värde som den lokala funktionen behöver som en parameter (CS8421, CS8422). Om den lokala funktionen måste fånga in variabler eller instansstatus från den omslutande kontexten tar du bort modifieraren static.
I följande exempel visas referenser som orsakar 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);
}
}
Om du vill åtgärda CS8422 skickar du nödvändiga instansdata till den lokala funktionen, flyttar hjälpen utanför instanskontexten eller tar bort static när den lokala funktionen måste komma åt instanstillståndet.
Relaterad diagnostik
- Mer information om lokala funktioner i uttrycksträd finns i Vissa uttryck är förbjudna i uttrycksträd i C#-kompilatormeddelanden.
- Mer information om lokala funktioner med generiska typparametrar finns i Lösa fel och varningar relaterade till generiska typparametrar och typargument i C#-kompilatormeddelanden.
- Mer information om attribut för lokala funktioner finns i Lösa fel och varningar som omfattar attributdeklaration och attributanvändning i koden i C#-kompilatormeddelanden.
- Mer information om insamlade variabler i anonyma funktioner finns i Lambda-uttrycksfel och varningar i C#-kompilatormeddelanden.
- Mer information om avbildningar i konstruktorer och primära konstruktorer finns i Lösa fel relaterade till konstruktordeklarationer och modulinitierare i C#-kompilatormeddelanden.