13

C# を使用して、switch ステートメントの各ケース ブロックでブレークを使用する必要があるようです。

この理由は、次の case ステートメントに進むことができる他の言語で見ることができます。

ケースブロックが他のケースブロックに落ちる可能性はありますか?

どうもありがとう、本当にありがとう!

4

4 に答える 4

34

はい、2 つの方法で次のケース ブロックに進むことができます。休憩を必要としない空のケースを使用するgotoか、次の (または任意の) ケースにジャンプするために使用できます。

switch (n) {
  case 1:
  case 2:
  case 3:
    Console.WriteLine("1, 2 or 3");
    goto case 4;
  case 4:
    Console.WriteLine(4);
    break;
}
于 2009-11-25T04:53:41.740 に答える
6

「中断」の強制は、バグを止めるためにあります。フォールスルーを強制する必要がある場合は、「goto case」を使用します (を適切な値に置き換えます)。

次の例は、何ができるかを示しています。

switch(n)
{
    case 1:
    case 2:
      //do something for 1+2
      //...
      goto case 3;
    case 3:
      //do something for 3, and also extra for 1+2
      //...
      break;
    default:
      //do something for all other values
      //...
      break;
}

http://msdn.microsoft.com/en-us/library/06tc147t%28VS.80%29.aspxを参照してください。

于 2009-11-25T04:59:58.557 に答える
3

C# はコンストラクトによる暗黙的なフォール スルーをサポートしていませんが、それでもbreak(or goto) は存在する必要があります ( msdn )。あなたができる唯一のことは、次の方法でケースを積み重ねることです:

switch(something) {
    case 1:
    case 2:
      //do something
      break;
    case 3:
      //do something else
}

しかし、それbreak(または のような別のジャンプステートメントgoto)がそこにある必要があります。

于 2009-11-25T04:53:22.083 に答える
1

私の C# (.NET 1.1、CF) コードでは、これらの両方が許可されています。

switch (_printerChoice) 
{
    case BeltPrintersEnum.ZebraQL220: 
        return new ZebraQL220Printer();
        break;
    case BeltPrintersEnum.ONeal: 
        return new ONealPrinter();
        break;
    default:            
        return new ZebraQL220Printer();         
                        break;  
}

switch (_printerChoice) 
{
    case BeltPrintersEnum.ZebraQL220: 
        return new ZebraQL220Printer();
    case BeltPrintersEnum.ONeal: 
        return new ONealPrinter();
    default:            
        return new ZebraQL220Printer();         
}

...しかし、休憩があると、それらはグレー表示されるため、意味がないと見なされます. したがって、少なくとも私の場合、それらは許可されていますが、必須ではありません。

于 2013-07-26T23:04:06.187 に答える