Verwenden Sie eine markierte Sprunganweisung (IDE0410)

Eigentum Wert
Regel-ID IDE0410
Title Eine beschriftete Sprunganweisung verwenden
Kategorie Style
Unterkategorie Sprachregeln (Codeblock-Voreinstellungen)
Anwendbare Sprachen C# 15+
Options csharp_style_prefer_labeled_jump_statements

Übersicht

Für einen klareren, prägnanteren Kontrollfluss in verschachtelten Schleifen kennzeichnet diese Regel Code, der goto-Anweisungen oder Muster mit booleschen Flags verwendet, um verschachtelte Schleifen zu verlassen oder fortzusetzen, wenn stattdessen eine beschriftete break- oder continue-Anweisung (C# 15+) verwendet werden könnte.

Die Regel erkennt die folgenden Muster:

  • Eine goto-Anweisung, die zu einer Bezeichnung direkt nach einer geschachtelten Schleife springt und durch break <label> ersetzt werden kann.
  • Eine goto-Anweisung, die am Ende des Schleifenkörpers zu einer leeren Bezeichnung springt (also die äußere Schleife fortsetzt) und durch continue <label> ersetzt werden kann.
  • Ein Muster mit einer booleschen Flag-Variable, bei dem eine Flag-Variable auf true gesetzt und dann auf jeder Schleifenebene geprüft wird, um eine Unterbrechung oder eine Fortsetzung durch verschachtelte Schleifen nach außen weiterzugeben, das durch ein einzelnes beschriftetes break <label> oder continue <label> ersetzt werden kann.

Optionen

Optionen geben das Verhalten an, das die Regel erzwingen soll. Informationen zum Konfigurieren von Optionen finden Sie unter Optionsformat.

csharp_style_prefer_labeled_jump_statements

Eigentum Wert Beschreibung
Name der Option csharp_style_prefer_labeled_jump_statements
Optionswerte true Benannte Sprunganweisungen bevorzugen
false Deaktiviert die Regel.
Standardwert der Option true

Example

Die folgenden Beispiele zeigen die drei Muster, die diese Regel erkennt:

goto durch break-Label ersetzt

// Code with violations.
for (int x = 0; x < 10; x++)
{
    for (int y = 0; y < 10; y++)
    {
        if (x * y > 20)
            goto found;
    }
}

found:
Console.WriteLine("Done");

// Fixed code.
found: for (int x = 0; x < 10; x++)
{
    for (int y = 0; y < 10; y++)
    {
        if (x * y > 20)
            break found;
    }
}

Console.WriteLine("Done");

goto durch continue-Marke ersetzt

// Code with violations.
for (int i = 0; i < 10; i++)
{
    for (int j = 0; j < 10; j++)
    {
        if (j == 5)
            goto next;
    }

    next: ; // The empty statement is required; a label in C# must be followed by a statement.
}

// Fixed code.
next: for (int i = 0; i < 10; i++)
{
    for (int j = 0; j < 10; j++)
    {
        if (j == 5)
            continue next;
    }
}

Flag-Muster durch Break-Bezeichnung ersetzt

// Code with violations.
bool found = false;
for (int i = 0; i < 10; i++)
{
    for (int j = 0; j < 10; j++)
    {
        if (i * j > 20)
        {
            found = true;
            break;
        }
    }

    if (found)
        break;
}

// Fixed code.
loop_i: for (int i = 0; i < 10; i++)
{
    for (int j = 0; j < 10; j++)
    {
        if (i * j > 20)
        {
            break loop_i;
        }
    }
}

Unterdrücken einer Warnung

Wenn Sie nur einen einzelnen Verstoß unterdrücken möchten, fügen Sie Ihrer Quelldatei Präprozessordirektiven hinzu, um die Regel zu deaktivieren und dann erneut zu aktivieren.

#pragma warning disable IDE0410
// The code that's violating the rule is on this line.
#pragma warning restore IDE0410

Um die Regel für eine Datei, einen Ordner oder ein Projekt zu deaktivieren, legen Sie den Schweregrad auf none in der Konfigurationsdatei fest.

[*.cs]
dotnet_diagnostic.IDE0410.severity = none

Um alle Codestilregeln zu deaktivieren, legen Sie den Schweregrad für die Kategorie Style auf none in der Konfigurationsdatei fest.

[*.cs]
dotnet_analyzer_diagnostic.category-Style.severity = none

Weitere Informationen finden Sie unter Vorgehensweise: Unterdrücken von Codeanalyse-Warnungen.

Siehe auch