ホームページ > バックエンド開発 > C++ > C# の switch ステートメントでフォールスルー動作を実現するにはどうすればよいですか?

C# の switch ステートメントでフォールスルー動作を実現するにはどうすればよいですか?

Patricia Arquette
リリース: 2025-01-04 22:13:46
オリジナル
970 人が閲覧しました

How Can I Achieve Fallthrough Behavior in C#'s Switch Statements?

C# での Switch ステートメントのフォールスルーについて

C# では、switch ステートメントを使用すると、指定された変数の値に基づいてプログラム フローを制御できます。ただし、従来の if/else 構造には、switch ステートメントのようなさまざまなケースを「フォールスルー」する機能がありません。

数値を単語表現に変換しようとする次の例を考えてみましょう。

static 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;
}
ログイン後にコピー

このコードをコンパイルすると、あるケースから別のケースに制御が移行できないことを示すエラーが発生して失敗します。この問題は、C# では、実行フローが確実に制御されるように、各ケースの後に switch ステートメントで明示的なブレークが必要であるという事実に起因しています。

フォールスルーの達成

switch ステートメントでフォールスルーを実現するには、次の 3 つのオプションがあります:

  1. Empty Cases: ケースは空のままにすることができ、コードを実行せずに次のケースへのフォールスルーを効果的に許可します。
  2. Goto case: goto case 構文を使用して明示的に制御を移行できます。
  3. デフォルトへ移動: デフォルトの goto 構文は制御を次へ転送します。現在のケースがデフォルトと等しくない場合でも、デフォルトのケース。

Fallthrough の例

次の NumberToWords 関数の修正バージョンでは、goto を利用します。フォールスルーを実現するための case 構文:

static 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]);
            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 case 1;
        case 1:
            int o = number % 10;
            ans += numbers[o];

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

以上がC# の switch ステートメントでフォールスルー動作を実現するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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