Usar instrução de salto identificada (IDE0410)

Propriedade Value
ID da regra IDE0410
Título Usar instrução de salto identificada
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 obter um fluxo de controle de loops aninhados mais claro e conciso, esta regra sinaliza códigos que usam instruções goto ou padrões com sinalizadores booleanos para sair de loops aninhados ou continuar sua execução, quando uma instrução com rótulo break or continue statement (C# 15+) poderia ser utilizada.

A regra detecta os seguintes padrões:

  • Uma instrução goto que salta para um rótulo imediatamente após um loop aninhado, que pode ser substituído por break <label>.
  • Uma instrução goto 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 com sinalização booleana, no qual uma variável de sinalização é definida como true e, em seguida, verificada em cada nível do loop para propagar um break or continue para fora por loops aninhados, podendo ser substituído por uma única instrução 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 pelo 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 pelo 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 sinalização substituído pelo rótulo 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 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