ラベル付きジャンプ ステートメントを使用する (IDE0410)

プロパティ 価値
ルール識別子 IDE0410
タイトル ラベル付きジャンプ ステートメントを使用する
Category Style
サブカテゴリー 言語ルール(コードブロックの設定)
該当する言語 C# 15 以降
Options csharp_style_prefer_labeled_jump_statements

概要

より明確で簡潔な入れ子になったループ制御フローのために、この規則は、ラベル付きのgotoまたはbreakステートメント (C# 15 以降) を代わりに使用できる場合に、continueステートメントまたはブール型フラグ パターンを使用して入れ子になったループから抜け出すか、継続するコードにフラグを設定します。

ルールは次のパターンを検出します。

  • 入れ子になったループの直後にラベルにジャンプする goto ステートメント。 break <label>に置き換えることができます。
  • ループ本体の末尾にある空のラベルにジャンプする goto ステートメント (実質的に外側のループを続けます)、 continue <label>に置き換えることができます。
  • ブール型フラグ パターン。フラグ変数が true に設定され、各ループ レベルでチェックされ、改行が伝達されるか、入れ子になったループを介して外側に向かって続行されます。これは、ラベル付けされた 1 つの break <label> または continue <label>に置き換えることができます。

オプション

オプションでは、ルールを適用する動作を指定します。 オプションの構成については、「 オプションの形式」を参照してください。

C# スタイル: ラベル付きジャンプ ステートメントを優先する

プロパティ 価値 Description
オプション名 ラベル付きジャンプ文を優先する C# スタイル
オプション値 true ラベル付きジャンプ ステートメントを優先する
false ルールを無効にします。
既定のオプション値 true

Example

次の例は、このルールで検出される 3 つのパターンを示しています。

goto が 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 を 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;
    }
}

フラグ パターンを区切りラベルに置き換える

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

警告を抑制する

1 つの違反のみを抑制する場合は、ソース ファイルにプリプロセッサ ディレクティブを追加して無効にしてから、ルールを再度有効にします。

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

ファイル、フォルダー、またはプロジェクトのルールを無効にするには、noneでその重要度をに設定します。

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

すべてのコード スタイル規則を無効にするには、Styleでカテゴリ none の重要度を に設定してください。

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

詳細については、「 コード分析の警告を抑制する方法」を参照してください。

こちらも参照ください