ホームページ > バックエンド開発 > C++ > C# の Switch ステートメントでのフォールスルー動作はどのように機能しますか? `goto case` をいつ使用する必要がありますか?

C# の Switch ステートメントでのフォールスルー動作はどのように機能しますか? `goto case` をいつ使用する必要がありますか?

Linda Hamilton
リリース: 2025-01-03 06:37:40
オリジナル
478 人が閲覧しました

How Does Fallthrough Behavior Work in C# Switch Statements, and When Should `goto case` Be Used?

C# Switch ステートメントのフォールスルー動作

C# では、switch ステートメントを使用すると、複数のケースに一致する場合にコードを順次実行できます。ただし、デフォルトでは、switch ステートメントでは、予期しない動作を防ぐために、各ケースの最後に明示的な Break ステートメントが必要です。

次のコード例を考えてみましょう。

string NumberToWords(int number)
{
    string[] numbers = new string[] 
        { "", "one", "two", "three", "four", "five", 
          "six", "seven", "eight", "nine" };
    string[] tens = new string[] 
        { "", "", "twenty", "thirty", "forty", "fifty", 
          "sixty", "seventy", "eighty", "ninety" };
    string[] teens = new string[]
        { "ten", "eleven", "twelve", "thirteen", "fourteen", "fifteen",
          "sixteen", "seventeen", "eighteen", "nineteen" };

    string ans = "";
    switch (number.ToString().Length)
    {
        case 3:
            ans += string.Format("{0} hundred and ", numbers[number / 100]);
        case 2:
            int t = (number / 10) % 10;
            if (t == 1)
            {
                ans += teens[number % 10];
                break;
            }
            else if (t > 1)
                ans += string.Format("{0}-", tens[t]);
        case 1:
            int o = number % 10;
            ans += numbers[o];

            break;
        default:
            throw new ArgumentException("number");
    }
    return ans;
}
ログイン後にコピー

このコードは、数値を文字列表現に変換します。ただし、switch ステートメントでは、制御がケース 3 からケース 2、およびケース 2 からデフォルトに移行できないことを示すエラーが発生します。その理由は、C# では、後続のケースの意図しない実行を防ぐために switch ステートメントに明示的なブレークが必要であるためです。

フォールスルー動作を実現するには、特別な goto case 構文を使用できます。例での実装方法は次のとおりです。

switch (number.ToString().Length)
{
    case 3:
        ans += string.Format("{0} hundred and ", numbers[number / 100]);
        goto case 2;
    case 2:
        int t = (number / 10) % 10;
        if (t == 1)
        {
            ans += teens[number % 10];
            break;
        }
        else if (t > 1)
            ans += string.Format("{0}-", tens[t]);
        goto default;
    case 1:
        int o = number % 10;
        ans += numbers[o];

        break;
    default:
        throw new ArgumentException("number");
}
ログイン後にコピー

この変更されたコードでは、goto case キーワードにより、明示的な Break ステートメントを必要とせずに、実行を次のケースにフォールスルーできます。 case 3 の後に goto case 2 を追加すると、入力数値の長さに関係なく、その case より下のコード (10 と 1 を変換する) が実行されます。同様に、ケース 2 の後に goto default を追加すると、デフォルトのケースが常に実行されるようになります。

このフォールスルー動作は、提供された例の数字の対応する単語表現への変換など、特定の状況では望ましい場合があります。ただし、不注意なフォールスルーは複雑でエラーが発生しやすいコードにつながる可能性があるため、賢明かつ注意して使用することが重要です。

以上がC# の Switch ステートメントでのフォールスルー動作はどのように機能しますか? `goto case` をいつ使用する必要がありますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート