Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
In dit artikel worden de volgende compilerfouten en -waarschuwingen behandeld:
- CS8108: Kan argument met dynamisch type niet doorgeven aan parameter 'parameter' van de lokale functie 'method'.
- CS8112: Lokale functie 'methode' moet een hoofdtekst declareren omdat deze niet is gemarkeerd als 'statisch extern'.
- CS8321: De lokale functie 'methode' wordt gedeclareerd maar nooit gebruikt
- CS8421: Een statische lokale functie kan geen verwijzing naar 'variabele' bevatten.
- CS8422: Een statische lokale functie kan geen verwijzing naar 'this' of 'base' bevatten.
Lokale functies zijn toegevoegd in C# 7.0. Hiermee kunt u helpermethoden binnen een ander lid declareren. De diagnostische gegevens in dit artikel hebben betrekking op declaraties van lokale functies, aanroepen, gebruik en de extra opnamebeperkingen voor static lokale functies.
Functieblokken van lokale functies
- CS8112: Lokale functie 'methode' moet een hoofdtekst declareren omdat deze niet is gemarkeerd als 'statisch extern'.
Een declaratie van een lokale functie moet een hoofdtekst bevatten, tenzij de lokale functie wordt gedeclareerd static extern. Voeg een bloktekst of een expressietekst toe aan de lokale functie. Als de implementatie extern wordt geleverd, markeert u de lokale functie static extern en zorgt u ervoor dat de declaratie de regels voor externe methoden volgt.
Params-parameters en dynamische argumenten
- CS8108: Kan argument met dynamisch type niet doorgeven aan parameter 'parameter' van de lokale functie 'method'.
Een lokale functie-aanroep kan geen argument doorgeven dynamic aan een params parameter. Converteer de waarde naar het elementtype of het matrixtype dat wordt verwacht door de params parameter vóór de aanroep. U kunt de waarden ook opslaan in een expliciet getypte matrix en die matrix doorgeven aan de lokale functie.
Ongebruikte lokale functies
- CS8321: De lokale functie 'methode' wordt gedeclareerd maar nooit gebruikt
De compiler meldt deze waarschuwing wanneer u een lokale functie declareert, maar geen enkele bereikbare code deze aanroept. Verwijder de ongebruikte lokale functie of roep deze aan vanuit het omsluitende lid. Als u de lokale functie in een toekomstige wijziging wilt gebruiken, moet u deze uit de bron houden totdat deze nodig is.
Statische lokale functies kunnen de status niet vastleggen
- CS8421: Een statische lokale functie kan geen verwijzing naar 'variabele' bevatten.
- CS8422: Een statische lokale functie kan geen verwijzing naar 'this' of 'base' bevatten.
Een static lokale functie kan geen toestand uit de omliggende scope vastleggen. Er kan niet worden verwezen naar omsluitende lokale variabelen, parameters of instantieleden via this of this zelf. Geef elke waarde door die de lokale functie nodig heeft als een parameter (CS8421, CS8422). Als de lokale functie variabelen of instantiegegevens uit de omvattende scope moet vastleggen, verwijdert u de modifier static.
In het volgende voorbeeld ziet u verwijzingen die cs8422 veroorzaken:
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);
}
}
Als u CS8422 wilt herstellen, geeft u de vereiste exemplaargegevens door aan de lokale functie, verplaatst u de helper buiten de instantiecontext of verwijdert static u deze wanneer de lokale functie toegang moet hebben tot de status van het exemplaar.
Verwante diagnostische gegevens
- Zie Sommige expressies zijn verboden in expressiestructuren in C#-compilerberichten voor meer informatie over lokale functies in expressiestructuren.
- Voor meer informatie over lokale functies met algemene typeparameters raadpleegt u Fouten en waarschuwingen oplossen met betrekking tot algemene typeparameters en typeargumenten in de C#-compilerberichten.
- Zie Fouten en waarschuwingen oplossen die betrekking hebben op kenmerkdeclaratie en kenmerkgebruik in uw code in C#-compilerberichten voor meer informatie over kenmerken in lokale functies.
- Zie Lambda-expressiefouten en waarschuwingen in C#-compilerberichten voor meer informatie over vastgelegde variabelen in anonieme functies.
- Zie Fouten oplossen met betrekking tot constructordeclaraties en module-initializers in C#-compilerberichten voor meer informatie over captures in constructors en primaire constructors.