でswitch
、代わりに単語や1文字を書いてもdefault
、エラーは発生しません。例えば
switch(10)
{
case 1:
break;
hello:
break;
}
エラーをスローせずに実行されます。
誰かがこれがどのように機能するか説明できますか?
でswitch
、代わりに単語や1文字を書いてもdefault
、エラーは発生しません。例えば
switch(10)
{
case 1:
break;
hello:
break;
}
エラーをスローせずに実行されます。
誰かがこれがどのように機能するか説明できますか?
hello:
はラベルであり、したがって。の宛先になる可能性があるため、コンパイル中goto
です。これをコンパイルすると、参照されていないラベルに関する警告が表示されました(gotoがなかったため)
LINQPadをスローできる例を次に示します。「1」と「hello」の両方が出力されることに気付くでしょう。
switch(1)
{
case 1:
"1".Dump();
goto hello;
break;
hello:
"hello".Dump();
break;
}
switch
それは声明とは無関係です。これは、(悪い習慣のためにめったに使用されない)goto
ステートメントのラベル識別子です。
goto something2;
something1:
Console.WriteLine("world");
goto done;
something2:
Console.WriteLine("hello");
goto something1;
done:
あなたの例では、次のコードスニペットを見ることができます。
switch (10)
{
case 1:
break;
hello:
Console.Write("In hello label");
break;
case 2:
goto hello;
break;
}
上記では、switchステートメントでgotoステートメントのラベルを定義しています。switchステートメントがに該当する場合case 2
は、ラベルに移動しhello
ます。元のコードスニペットにはがないgoto hello;
ため、参照されていないラベルの警告が表示されます。
ラベルhello
は、switchステートメントで何もする必要はありません(内部で定義されている場合を除く)。