Usar instrução de salto com rótulo (IDE0410)

Propriedade Value
ID da regra IDE0410
Título Usar a instrução de salto rotulada
Categoria Style
Subcategoria Regras de idioma (preferências de bloco de código)
Idiomas aplicáveis C# 15+
Opções csharp_style_prefer_labeled_jump_statements

Visão geral

Para um fluxo de controle de laços aninhados mais claro e conciso, esta regra sinaliza códigos que usam instruções goto ou padrões de sinalizador booleano para sair de ou continuar laços aninhados, quando uma instrução break ou continue com rótulo (C# 15+) poderia ser usada em vez disso.

A regra detecta os seguintes padrões:

  • Uma goto instrução que salta para um rótulo imediatamente após um loop aninhado, que pode ser substituído por break <label>.
  • Uma goto instrução que salta para um rótulo vazio no final do corpo do loop (continuando efetivamente o loop externo), que pode ser substituído por continue <label>.
  • Um padrão de sinalizador booliano, em que uma variável de sinalizador é definida true e, em seguida, marcada em cada nível de loop para propagar uma quebra ou continuar para fora por loops aninhados, que podem ser substituídos 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 opções de configuração, consulte Formato para opções.

csharp_style_prefer_labeled_jump_statements

Propriedade Value Descrição
Nome da opção csharp_style_prefer_labeled_jump_statements
Valores da opção true Preferir instruções de salto rotuladas
false Desabilita a regra
Valor da opção padrão true

Example

Os exemplos a seguir mostram os três padrões que esta regra detecta:

goto substituído por rótulo break

// 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 rótulo continue

// 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 de sinalizador substituído pelo rótulo de interrupção

// 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 seu arquivo de origem para desabilitar a regra e, em seguida, habilitá-la novamente.

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

Para desabilitar a regra em um arquivo, uma pasta ou um projeto, defina a severidade 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.

Consulte também