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:
Die folgenden Fehler treten auf, wenn Sie eine break-, continue-, goto- oder return-Anweisung so verwenden, dass sie nicht zum umgebenden Steuerungsfluss passt:
- CS0126: Ein Objekt eines Typs, das in "Type" wandelbar ist, ist erforderlich.
- CS0127: Da "method" "void" zurückgibt, darf kein Rückgabeschlüsselwort gefolgt von einem Objektausdruck sein.
- CS0139: Keine einschließende Schleife, die mit break oder continue verlassen oder fortgesetzt werden kann
- CS0153: Eine goto-case-Anweisung ist nur in einer switch-Anweisung gültig
- CS0159: Keine solche Bezeichnung "label" im Rahmen der Goto-Anweisung
- CS0161: 'method': Nicht alle Codepfade geben einen Wert zurück.
- CS0163: Die Steuerung kann nicht von einer case-Bezeichnung ('label') zur anderen übergehen
- CS9393: Keine einschließende Schleife oder switch-Anweisung mit dem Bezeichner 'label', die mit 'break' verlassen werden kann
- CS9394: Keine umschließende Schleife mit der Bezeichnung 'label', mit der fortgefahren werden kann
Die folgende Warnung tritt auf, wenn eine goto case Anweisung auf einen Wert abzielt, der eine Konvertierung erfordert:
- CS0469: Der Wert "goto case" ist nicht implizit in typ "type" konvertierbar.
Unterbrechen und Fortsetzen von Zielen
- CS0139: Keine umschließende Schleife, aus der heraus abgebrochen oder fortgefahren werden kann
- CS9393: Keine einschließende Schleife oder switch-Anweisung mit der Bezeichnung „label“, aus der ausgebrochen werden kann
- CS9394: Keine umschließende Schleife mit der Bezeichnung "Label", aus der die Fortsetzung fortgesetzt werden soll
Die break-Anweisung beendet die Ausführung der innersten umschließenden Schleife oder switch-Anweisung, und die continue-Anweisung beginnt die nächste Iteration der innersten umschließenden Schleife. Der Compiler meldet diese Diagnose, wenn es dieses Ziel nicht finden kann.
So beheben Sie diese Fehler:
- Platzieren Sie die
break- odercontinue-Anweisung in einerwhile-,do-,for- oderforeach-Schleife. Einebreak-Anweisung kann auch in einemswitch-Abschnitt vorkommen. Ein eigenständigesbreakodercontinue, das nicht in eine dieser Anweisungen eingebettet ist, hat kein Ziel (CS0139). - Wenn Sie eine mit einem Label versehene
break(break label;) schreiben, weisen Sie dasselbe Label einer umschließenden Schleife oderswitch-Anweisung zu. Die Bezeichnung muss eine Schleife oderswitchbenennen, die diebreak-Anweisung enthält (CS9393). - Wenn Sie eine beschriftete
continue(continue label;) Schreiben, wenden Sie dieselbe Bezeichnung auf eine eingeschlossene Schleife an. Ein bezeichnetescontinuekann nur eine Schleife kennzeichnen, keineswitch-Anweisung, dacontinuedie nächste Iteration der Schleife startet (CS9394).
Weitere Informationen zu diesen Anweisungen finden Sie unter der break-Anweisung und der continue-Anweisung im Artikel zu Sprunganweisungen.
Goto-Anweisungsziele
- CS0153: Eine goto-case-Anweisung ist nur in einer switch-Anweisung zulässig
- CS0159: Keine solche Bezeichnung "label" im Rahmen der Goto-Anweisung
- CS0469: Der Wert "goto case" ist nicht implizit in typ "type" konvertierbar.
Die goto Anweisung überträgt die Steuerung an eine beschriftete Anweisung, an eine case Bezeichnung oder an die default Bezeichnung einer switch Anweisung. Der Compiler meldet diese Diagnose, wenn die Zielbezeichnung nicht vorhanden ist oder nicht über die goto Anweisung erreichbar ist.
So beheben Sie diese Fehler:
- Verwenden Sie
goto caseundgoto defaultnur innerhalb einerswitch-Anweisung. Beide Formen bezeichnen einen Abschnitt der umschließendenswitchAnweisung, daher haben sie außerhalb einer solchen keine Bedeutung (CS0153). - Fügen Sie eine Bezeichnung hinzu, die dem Namen in der
gotoAnweisung entspricht, und bestätigen Sie, dass sich die Bezeichnung im Bereich dergotoAnweisung befindet. EinegotoAnweisung kann nicht in einen geschachtelten Block springen undgoto caseerfordert eine übereinstimmendecaseBezeichnung in derselbenswitchAnweisung (CS0159). - Weisen Sie dem Wert denselben
goto caseTyp wie derswitchregelbezogene Ausdruck zu, oder fügen Sie eine explizite Umwandlung hinzu, sodass eine implizite Konvertierung vorhanden ist. Verwenden Sie beispielsweisegoto case (char)127;anstelle vongoto case 127;, wennswitcheinenchar-Wert steuert (CS0469).
Weitere Informationen zur goto-Anweisung finden Sie unter der goto-Anweisung im Artikel „Sprunganweisungen“. Weitere Informationen zu goto case und goto default finden Sie in der switch-Anweisung im Artikel zu Auswahlanweisungen.
Abschnittsende wechseln
- CS0163: Der Kontrollfluss kann nicht von einer case-Bezeichnung ('label') zur nächsten übergehen
C# lässt nicht zu, dass der Kontrollfluss von einem switch-Abschnitt in den nächsten weiterfällt. Wenn eine switch Anweisung mehrere Abschnitte enthält, müssen Sie jeden Abschnitt einschließlich des letzten Abschnitts explizit beenden.
Um diesen Fehler zu beheben, beenden Sie jeden switch-Abschnitt, der Anweisungen enthält, mit einer Sprunganweisung, z. B. break, return, goto case, goto default oder throw. Wenn Sie die gleichen Anweisungen für mehrere Werte ausführen möchten, stapeln Sie die case Beschriftungen ohne Anweisungen dazwischen; diese Anordnung fällt nicht durch. Wenn ein Abschnitt in einem anderen fortgesetzt werden soll, verwenden Sie goto case oder goto default, um den nächsten Abschnitt explizit zu benennen (CS0163).
Weitere Informationen zur switch-Anweisung finden Sie unter die switch-Anweisung im Artikel zu Auswahlanweisungen. Weitere Informationen zur Anweisung throw finden Sie unter Die Anweisung throw im Artikel über Anweisungen zur Ausnahmebehandlung.
Rückgabe-Anweisungswerte
- CS0126: Ein Objekt eines Typs, das in "Type" wandelbar ist, ist erforderlich.
- CS0127: Da "method" "void" zurückgibt, darf kein Rückgabeschlüsselwort gefolgt von einem Objektausdruck sein.
- CS0161: 'method': Nicht alle Codepfade geben einen Wert zurück.
Die return Anweisung beendet die Ausführung des enthaltenden Elements und gibt die Steuerung an den Aufrufer zurück. Eine return Anweisung kann auch einen Wert zurückgeben.
So beheben Sie diese Fehler:
- Geben Sie in jeder
returnAnweisung eines Elements einen Wert an, der einen Nicht-Rückgabetypvoidaufweist, und stellen Sie sicher, dass der Wert in diesen Rückgabetyp konvertierbar ist. EingetAccessor und eine Wertrückgabemethode erfordern beide einereturnAnweisung, die einen Wert (CS0126) enthält. - Entfernen Sie den Wert aus einer beliebigen
return-Anweisung in einem Member, dasvoidzurückgibt, z. B. aus einemset-Accessor oder einer Methode mit dem Rückgabetypvoid. Verwenden Sie eine barereturn;Anweisung, um früh zu beenden (CS0127). - Stellen Sie sicher, dass jeder Codepfad in einem Member mit Rückgabewert mit einer
return-Anweisung oder einerthrow-Anweisung endet. Ein Member gibt auf allen Codepfaden einen Wert zurück, wenn in jeder Verzweigung jeder bedingten Anweisung ein Wert zurückgegeben wird oder wenn der bedingten Logik eine abschließendereturn-Anweisung folgt (CS0161).
Weitere Informationen zu return-Anweisungen in asynchronen Methoden und Membern, die Task- oder ValueTask-Typen zurückgeben, finden Sie unter Fehler und Warnungen im Zusammenhang mit async und await. Weitere Informationen zu return-Anweisungen in Iteratoren finden Sie unter Fehler und Warnungen im Zusammenhang mit Iteratoren.
Weitere Informationen zur return-Anweisung finden Sie unter der return-Anweisung im Artikel „Sprunganweisungen“.
C#-Sprachspezifikation
Weitere Informationen finden Sie im Abschnitt "Jump-Anweisungen " der C#-Sprachspezifikation.