ホームページ >バックエンド開発 >C++ >C# の Switch ステートメントは失敗する可能性がありますか?また失敗する場合はどのようにすればよいですか?

C# の Switch ステートメントは失敗する可能性がありますか?また失敗する場合はどのようにすればよいですか?

Linda Hamilton
Linda Hamiltonオリジナル
2025-01-03 14:26:46875ブラウズ

Can C# Switch Statements Fall Through, and If So, How?

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

switch ステートメントは、指定された変数の値に基づいて別のコードを実行する方法を提供します。 switch ステートメントには、if/else if 構造に比べていくつかの利点がありますが、その制限の 1 つは、あるケースから別のケースにフォールスルーできないことです。

C# では、コンパイラーは「フォールスルーなし」ルールを強制します。これは、ケースに到達したときに実行が次のケースの先頭にジャンプする必要があることを意味します。この動作により、コードが明確になり、複数のケースが意図せず実行されることが防止されます。

switch ステートメントを使用して数値を単語表現に変換しようとする次の例を考えてみましょう。

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");
}

Whenこのコードを実行すると、コンパイラは「あるケース ラベル ('case 3:') から別のケース ラベルにコントロールがフォールスルーできません」および「あるケース ラベルからコントロールがフォールスルーできません」というエラーを生成します。 ('case 2:') を別のものに。"

C# でフォールスルー動作を実現するには、次の手法を使用できます:

  1. 空のケース: 1空のケースを作成してフォールスルーを強制することができます。たとえば、上記の例では、case 0: を空の case に置き換えることができます。
  2. Goto Case: goto case 構文では、明示的なフォールスルーが許可されています。たとえば、goto case 2 を使用できます。指定された例では、ケース 1: の最後でケース 2: に移行します。
  3. Goto Default: 同様に、goto default;

フォールスルーは、不明瞭でエラーが発生しやすいコードを作成する可能性があるため、推奨されないことに注意することが重要です。一般に、複数の条件をチェックする必要がある場合は、if/else またはその他の条件構文を使用することをお勧めします。

以上がC# の Switch ステートメントは失敗する可能性がありますか?また失敗する場合はどのようにすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。