C# で Switch ステートメントはフォールスルーできますか?
C# の Switch ステートメントは通常、一致したケースに関連付けられたコードを実行してからスイッチを終了します。ただし、「フォールスルー」として知られる、あるケースを別のケースにフローさせることが望ましい場合があります。
ここに示した例では、NumberToWords メソッドは数値を対応する単語表現に変換しようとします。 3 つの配列を使用して、数字、10 の位、10 の位を表します。 switch ステートメントは、適切なケースに一致する入力数値の長さを考慮します。
ただし、switch ステートメントでは各ケースの後に実行する場所が明示的に指定されていないため、C# コンパイラはエラーをスローします。デフォルトでは、C# では、フォールスルーを防ぐために、各ケースに Break ステートメントまたは goto ステートメントが必要です。
C# でフォールスルーを実現するには、次の手法を利用できます:
空のケース: コードなしでケースを定義し、次のケースの実行を許可します。
switch (/*...*/) { case 0: break; // fall through to case 1 case 1: // do something break; }
goto case: goto ステートメントを使用して、スイッチ内の特定のケースにジャンプします。
switch (/*...*/) { case 0: goto case 1; case 1: // do something break; }
gotodefault: デフォルトにジャンプするには、gotodefault ステートメントを使用します。 case.
switch (/*...*/) { case 0: goto default; default: // do something break; }
元の NumberToWords の例では、goto を使用して目的のフォールスルー動作を実現できます。
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"); }
一方、フォールスルーはより簡潔な動作を提供します。特定のシナリオでの実装では、慎重に使用することが重要です。過度のフォールスルーはコードが混乱し、保守が困難になる可能性があるため、慎重に使用する必要があります。
以上がC# Switch ステートメントでフォールスルー動作を実現するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。