Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Dieser Artikel behandelt die folgenden Compiler-Fehler und -Warnungen:
- CS8108: Argument mit dynamischem Typ kann nicht an den Parameter 'parameter' der lokalen Funktion 'method' übergeben werden.
- CS8112: Die lokale Funktion "methode" muss einen Text deklarieren, da sie nicht als "statisch extern" gekennzeichnet ist.
- CS8321: Die lokale Funktion "method" wird deklariert, aber nie verwendet.
- CS8421: Eine statische lokale Funktion kann keinen Verweis auf "Variable" enthalten.
- CS8422: Eine statische lokale Funktion kann keinen Verweis auf "this" oder "base" enthalten.
Lokale Funktionen wurden in C# 7.0 hinzugefügt. Sie können Hilfsmethoden innerhalb eines anderen Members deklarieren. Die Diagnose in diesem Artikel behandelt lokale Funktionsdeklarationen, Aufrufe, Verwendung und die zusätzlichen Erfassungseinschränkungen für static lokale Funktionen.
Lokale Funktionskörper
- CS8112: Die lokale Funktion "methode" muss einen Text deklarieren, da sie nicht als "statisch extern" gekennzeichnet ist.
Eine lokale Funktionsdeklaration muss einen Text enthalten, es sei denn, die lokale Funktion wird als static extern deklariert. Fügen Sie der lokalen Funktion einen Blockkörper oder einen Ausdruckskörper hinzu. Wenn die Implementierung extern bereitgestellt wird, markieren Sie die lokale Funktion static extern , und stellen Sie sicher, dass die Deklaration den Regeln für externe Methoden folgt.
Parameter und dynamische Argumente
- CS8108: Argument mit dynamischem Typ kann nicht an den Parameter 'parameter' der lokalen Funktion 'method' übergeben werden.
Ein lokaler Funktionsaufruf kann kein dynamic Argument an einen params Parameter übergeben. Konvertieren Sie den Wert in den Vom Parameter erwarteten params Elementtyp oder Arraytyp vor dem Aufruf. Sie können die Werte auch in einem explizit typierten Array speichern und dieses Array an die lokale Funktion übergeben.
Nicht verwendete lokale Funktionen
- CS8321: Die lokale Funktion "method" wird deklariert, aber nie verwendet.
Der Compiler meldet diese Warnung, wenn Sie eine lokale Funktion deklarieren, aber kein erreichbarer Code sie aufruft. Entfernen Sie die nicht verwendete lokale Funktion, oder rufen Sie sie aus dem eingeschlossenen Element auf. Wenn Sie planen, die lokale Funktion in einer späteren Änderung zu verwenden, nehmen Sie sie erst in den Quellcode auf, wenn sie benötigt wird.
Statische lokale Funktionen können den Zustand nicht erfassen
- CS8421: Eine statische lokale Funktion kann keinen Verweis auf "Variable" enthalten.
- CS8422: Eine statische lokale Funktion kann keinen Verweis auf "this" oder "base" enthalten.
Eine static lokale Funktion kann den Zustand nicht aus dem eingeschlossenen Bereich erfassen. Sie kann nicht auf umschließende lokale Variablen, Parameter oder Instanzmitglieder über this bzw. auf this selbst verweisen. Übergeben Sie jeden Wert, den die lokale Funktion als Parameter benötigt (CS8421, CS8422). Wenn die lokale Funktion Variablen oder den Instanzstatus aus dem eingeschlossenen Bereich erfassen muss, entfernen Sie den static Modifizierer.
Das folgende Beispiel zeigt Referenzen, die zu CS8422 führen:
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);
}
}
Um CS8422 zu beheben, übergeben Sie die erforderlichen Instanzdaten an die lokale Funktion, verschieben Sie das Hilfsprogramm außerhalb des Instanzkontexts, oder entfernen static Sie, wenn die lokale Funktion auf den Instanzstatus zugreifen muss.
Verwandte Diagnose
- Weitere Informationen zu lokalen Funktionen in Ausdrucksbäumen finden Sie unter Einige Ausdrücke sind in Ausdrucksbaumstrukturen nicht erlaubt in den C#-Compilermeldungen.
- Weitere Informationen zu lokalen Funktionen mit generischen Typparametern finden Sie unter Beheben von Fehlern und Warnungen im Zusammenhang mit generischen Typparametern und Typargumenten in C#-Compilermeldungen.
- Weitere Informationen zu Attributen in lokalen Funktionen finden Sie unter Beheben von Fehlern und Warnungen, die Attributdeklaration und Attributverwendung in Ihrem Code in C#-Compilermeldungen umfassen.
- Weitere Informationen zu erfassten Variablen in anonymen Funktionen finden Sie unter Lambda-Ausdrucksfehler und -Warnungen in C#-Compilermeldungen.
- Weitere Informationen zu Erfassungen in Konstruktoren und primären Konstruktoren finden Sie unter Beheben von Fehlern im Zusammenhang mit Konstruktordeklarationen und Modulinitialisierern in C#-Compilermeldungen.