Usa l'istruzione di salto etichettata (IDE0410)

Property Value
ID regola IDE0410
Titolo Usare l'istruzione di salto etichettata
Categoria Style
Sottocategoria Regole del linguaggio (preferenze del blocco di codice)
Linguaggi applicabili C# 15+
Opzioni csharp_style_prefer_labeled_jump_statements

Overview

Per un flusso di controllo dei cicli annidati più chiaro e conciso, questa regola segnala il codice che usa istruzioni goto o schemi con flag booleani per uscire da cicli annidati o continuarli, quando si potrebbe invece usare un'istruzione break o continue etichettata (C# 15+).

La regola rileva i modelli seguenti:

  • Un'istruzione goto che salta a un'etichetta immediatamente dopo un ciclo annidato, che può essere sostituita con break <label>.
  • Un'istruzione goto che salta a un'etichetta priva di istruzioni alla fine del corpo del ciclo (equivalendo di fatto a continuare il ciclo esterno), che può essere sostituita con continue <label>.
  • Modello di flag booleano, in cui una variabile flag è impostata true su e quindi selezionata a ogni livello di ciclo per propagare un'interruzione o continuare verso l'esterno attraverso cicli annidati, che possono essere sostituiti con un'etichetta singola break <label> o continue <label>.

Opzioni

Le opzioni specificano il comportamento che si desidera che la regola imponga. Per informazioni sulla configurazione delle opzioni, vedere Formato delle opzioni.

csharp_style_prefer_labeled_jump_statements

Property Value Description
Nome opzione stile_csharp_preferire_istruzioni_di_salto_con_etichetta
Valori delle opzioni true Preferire le istruzioni di salto con etichetta
false Disabilita la regola
Valore dell'opzione predefinito true

Example

Gli esempi seguenti mostrano i tre modelli rilevati da questa regola:

goto sostituito da etichetta di interruzione

// 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 sostituito dall'etichetta continua

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

Modello di flag sostituito dall'etichetta di interruzione

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

Eliminare un avviso

Se si desidera eliminare solo una singola violazione, aggiungere direttive del preprocessore al file di origine per disabilitare e quindi riabilitare la regola.

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

Per disabilitare la regola per un file, una cartella o un progetto, impostarne la gravità su none nel file di configurazione .

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

Per disabilitare tutte le regole in stile codice, impostare la gravità per la categoria Style su none nel file di configurazione.

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

Per altre informazioni, vedere Come eliminare gli avvisi di analisi del codice.

Vedere anche