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 つのオプションがあります:
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 サイトの他の関連記事を参照してください。