3

重複の可能性:
C#スイッチ変数の初期化:このコードがコンパイラエラーまたはランタイムエラーを引き起こさないのはなぜですか?

このswitchステートメント(驚いたことに、エラーなしでコンパイルおよび実行されます)では、変数somethingはケース2で宣言されておらず、ケース1は実行されません。これはどのように有効ですか?宣言せずに変数somethingを使用するにはどうすればよいですか?

switch(2){
 case 1:
  string something = "whatever";
  break;
 case 2:
  something = "where??";
  break;
}
4

1 に答える 1

5

これは、switchステートメントがケース全体に適用されるためです。したがって、switchステートメントが最初に処理されるとき、それはという名前の変数を定義し、somethingそのデフォルト値は...この場合は...になりますnull

さらに正確に言うと、ILが生成されると、caseその定義以下の変数のスコープで変数を使用できます。したがって、変数が2番目caseに宣言されている場合、最初の変数では使用できませんcaseが、3番目の変数では使用できますcase

于 2012-10-11T15:57:43.473 に答える