Gebruik een spronginstructie met label (IDE0410)

Property Value
Regel-ID IDE0410
Title Gelabelde spronginstructie gebruiken
Categorie Style
Subcategorie Taalregels (voorkeuren voor codeblok)
Toepasselijke talen C# 15+
Options csharp_style_prefer_labeled_jump_statements

Overzicht

Voor een duidelijkere, beknoptere besturingsstroom van geneste lussen markeert deze regel code die gebruikmaakt van goto-instructies of Booleaanse vlagpatronen om uit geneste lussen te breken of deze voort te zetten, terwijl in plaats daarvan een gelabelde break- of continue-instructie (C# 15+) kan worden gebruikt.

De regel detecteert de volgende patronen:

  • Een goto-statement dat naar een label springt dat zich onmiddellijk na een geneste lus bevindt, en dat kan worden vervangen door break <label>.
  • Een goto instructie die naar een leeg label aan het einde van de lustekst springt (effectief doorgaan met de buitenste lus), die kan worden vervangen door continue <label>.
  • Een patroon met een Booleaanse vlag, waarbij een vlagvariabele op true wordt ingesteld en vervolgens op elk lusniveau wordt gecontroleerd om een break of continue naar buiten door geneste lussen heen te propagëren, wat kan worden vervangen door één gelabelde break <label> of continue <label>.

Opties

Met opties geeft u het gedrag op dat door de regel moet worden afgedwongen. Zie Optieindeling voor meer informatie over het configureren van opties.

csharp_style_prefer_labeled_jump_statements

Property Value Beschrijving
Optienaam csharp_style_prefer_labeled_jump_statements
Optiewaarden true Geef de voorkeur aan gelabelde spronginstructies
false Hiermee wordt de regel uitgeschakeld
standaardoptiewaarde true

Example

In de volgende voorbeelden ziet u de drie patronen die door deze regel worden gedetecteerd:

goto vervangen door break-label

// 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 vervangen door continue label

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

Vlagpatroon vervangen door onderbrekingslabel

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

Een waarschuwing onderdrukken

Als u slechts één schending wilt onderdrukken, voegt u preprocessorrichtlijnen toe aan uw bronbestand om de regel uit te schakelen en vervolgens opnieuw in te schakelen.

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

Als u de regel voor een bestand, map of project wilt uitschakelen, stelt u de ernst ervan in op none in het configuratiebestand.

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

Als u alle regels voor de codestijl wilt uitschakelen, stelt u de ernst voor de categorie Style in op none in het configuratiebestand.

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

Zie Hoe u codeanalysewaarschuwingen kunt onderdrukken voor meer informatie.

Zie ook