Use instrução de salto rotulada (IDE0410)

Property Valor
ID da regra IDE0410
Título Usar instrução de salto com rótulo
Category Style
Subcategoria Regras de linguagem (preferências de blocos de código)
Línguas aplicáveis C# 15+
Options csharp_style_prefer_labeled_jump_statements

Descrição geral

Para um fluxo de controlo de ciclos aninhados mais claro e conciso, esta regra assinala código que utiliza instruções goto ou padrões de sinalizador booleano para sair de ciclos aninhados ou avançar para a iteração seguinte, quando poderia ser utilizada, em vez disso, uma instrução break ou continue com rótulo (C# 15+).

A regra deteta os seguintes padrões:

  • Uma goto instrução que salta para uma etiqueta imediatamente após um loop aninhado, que pode ser substituída por break <label>.
  • Uma instrução goto que salta para um rótulo vazio no final do corpo do ciclo (continuando efetivamente o ciclo externo), que pode ser substituída por continue <label>.
  • Um padrão de flag booleano, onde uma variável flag é definida para true e depois verificada em cada nível de loop para propagar uma quebra ou continuar para fora através de loops aninhados, que pode ser substituído por um único rotulado break <label> ou continue <label>.

Opções

As opções especificam o comportamento que você deseja que a regra imponha . Para obter informações sobre como configurar opções, consulte Formato de opção.

csharp_style_preferir_instruções_de_salto_com_etiqueta

Property Valor Description
Nome da opção csharp_style_preferir_instruções_de_salto_com_rótulo
Valores de opção true Prefira instruções de salto rotuladas
false Desativa a regra
Valor da opção padrão true

Example

Os exemplos seguintes mostram os três padrões que esta regra deteta:

Goto substituído por 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 substituído por 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;
    }
}

Padrão flag substituído por etiqueta break

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

Suprimir um aviso

Se você quiser suprimir apenas uma única violação, adicione diretivas de pré-processador ao arquivo de origem para desativar e, em seguida, reativar a regra.

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

Para desabilitar a regra de um arquivo, pasta ou projeto, defina sua gravidade como none no arquivo de configuração.

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

Para desabilitar todas as regras de estilo de código, defina a severidade da categoria Style como none no arquivo de configuração.

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

Para obter mais informações, consulte Como suprimir avisos de análise de código.

Ver também