15

私は C# を独学で学び始めたばかりで、Switch ステートメントに関するチュートリアルで次のように読みました。

あるケース ブロックから次のケース ブロックへの実行の流れが禁止される動作は、C# と C++ が異なる 1 つの領域です。C++ では、case ステートメントの処理を次々と実行できます。

C# で 1 つの case ステートメントの後で停止するのはなぜですか? breakステートメントを使用して任意の時点で停止できる場合、C# と C++ で一致が見つかった後に停止する理由はありますか? また、C# で複数のケースが必要な場合は、別の Switch ステートメントを使用する必要がありますか?

4

5 に答える 5

16

C#にはgoto case価値があり、フォールスルーのすべての利点がありますが、偶然に行うのは困難です。

MSDNの例

于 2012-11-05T20:34:53.070 に答える
16

技術的には、これは正しくありません。C# では、本体caseが空の場合にフォールスルーが許可されます。

switch(val) {
case 1:
case 2:
    Console.WriteLine("small");
    break;
case 3:
case 4:
case 5:
case 6:
case 7:
    Console.WriteLine("medium");
    break;

 default:
    Console.WriteLine("large");
    break;
}

C/C++ で空でない本体の後に暗黙的なフォールスルーを許可することは、多くの場合、誤って行われます。これが、C# の設計者が許可しないことにした理由です。

于 2012-11-05T20:36:40.817 に答える
4

C++ の switch ステートメントのフォールスルーは、一般に、解決した問題よりも多くの問題を引き起こしたという議論だと思います。つまり、プログラマーの意図ではないときに失敗した場合、break. そのため、C# はそれを廃止しました。

C++ の他の多くの「機能」と同じです。それらが時折役に立たなかったということではなく、より頻繁に有害であったというだけです. ほぼ何でも bool として評価するのと同じように、C# では次のことはできません。

if(1) 
{

}

int を bool として評価すると、見つけにくい多くのバグが発生したためです。

于 2012-11-05T20:35:32.133 に答える
1

C# のバージョンはエラーが発生しにくくなってbreakいます。見た目も少し綺麗です。繰り返しになりますが、とにかくほとんどの場合に switch ステートメントを使用する貴重な理由はほとんどありません (多くの場合、クラス継承によって両方の言語に組み込まれている型ディスパッチの不十分な実装になるだけです)。

于 2012-11-05T20:36:23.537 に答える