Använd märkt jump-instruktion (IDE0410)

Property Value
Regel-ID IDE0410
Titel Använda etiketterad jump-instruktion
Kategori Style
Underkategori Språkregler (kodblocksinställningar)
Tillämpliga språk C# 15+
Options csharp_style_prefer_labeled_jump_statements

Översikt

För ett tydligare och mer koncist kontrollflöde i kapslade loopar flaggar den här regeln kod som använder satser med goto eller booleska flaggor för att bryta sig ut ur eller fortsätta i kapslade loopar, när en märkt break- eller continue-sats (C# 15+) kan användas i stället.

Regeln identifierar följande mönster:

  • En goto-sats som hoppar till en etikett direkt efter en nästlad loop och som kan ersättas med break <label>.
  • En goto instruktion som hoppar till en tom etikett i slutet av loopens brödtext (som effektivt fortsätter den yttre loopen), som kan ersättas med continue <label>.
  • Ett booleskt flaggmönster, där en flaggvariabel anges till true och sedan kontrolleras på varje loopnivå för att sprida en bryt eller fortsätta utåt genom kapslade loopar, som kan ersättas med en enda etikett break <label> eller continue <label>.

Options

Alternativ anger det beteende som du vill att regeln ska framtvinga. Information om hur du konfigurerar alternativ finns i Alternativformat.

csharp_style_prefer_labeled_jump_statements

Property Value Beskrivning
Alternativnamn csharp_style_prefer_labeled_jump_statements
Alternativvärden true Föredrar etiketterade hoppinstruktioner
false Avaktiverar regeln
Standardalternativvärde true

Example

I följande exempel visas de tre mönster som den här regeln identifierar:

goto har ersatts av break-etikett

// 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 ersatt av fortsätt etikett

// 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;
    }
}

Flaggmönster har ersatts av break-etikett

// 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;
        }
    }
}

Undertryck en varning

Om du bara vill förhindra en enda överträdelse lägger du till förprocessordirektiv i källfilen för att inaktivera och återaktiverar sedan regeln.

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

Om du vill inaktivera regeln för en fil, mapp eller ett projekt anger du dess allvarlighetsgrad till none i konfigurationsfilen.

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

Om du vill inaktivera alla regler i kodformat anger du allvarlighetsgraden för kategorin Style till none i konfigurationsfilen.

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

Mer information finns i Så här utelämnar du kodanalysvarningar.

Se även