В случае коммутатора, если мы будем писать "по умолчанию" как любое слово или одну букву, это не вызывает ошибку
В switch, если мы пишем какое-либо слово или одну букву вместо default, она не выдает ошибки.
например.
switch(10)
{
case 1:
break;
hello:
break;
}
Выполняется без ошибки.
Может ли кто-нибудь объяснить, как это работает?
Ответ 1
Он компилируется, потому что hello: является меткой и, следовательно, может быть местом назначения goto. Когда я скомпилировал это, я получил предупреждения о ярлыке без ссылок (так как у меня не было goto)
Вот пример, который вы можете добавить в LINQPad - вы заметите, что он печатает как "1", так и "привет":
В вашем примере вы можете увидеть следующий фрагмент кода:
switch (10)
{
case 1:
break;
hello:
Console.Write("In hello label");
break;
case 2:
goto hello;
break;
}
В вышесказанном вы определяете метку для инструкции goto в инструкции switch. Если оператор switch падает до case 2, тогда он пойдет на метку hello. Поскольку ваш исходный фрагмент кода не имеет goto hello;, вы получите предупреждение о ярлыке без ссылок.
Ваш ярлык hello не должен ничего делать с оператором switch (кроме определения внутри).