С# переключатель/разрыв
Кажется, мне нужно использовать break в каждом блоке case в моей инструкции switch с помощью С#.
Я вижу причину этого на других языках, где вы можете перейти к следующему аргументу case.
Возможно ли, чтобы блоки case упали до других блоков case?
Спасибо, очень благодарен!
Ответы
Ответ 1
Да, вы можете перейти к следующему блоку кода двумя способами. Вы можете использовать пустые случаи, которые не нуждаются в перерыве, или вы можете использовать goto
для перехода к следующему (или любому) случаю:
switch (n) {
case 1:
case 2:
case 3:
Console.WriteLine("1, 2 or 3");
goto case 4;
case 4:
Console.WriteLine(4);
break;
}
Ответ 2
Придерживание "перерыва" заключается в том, чтобы остановить ошибки. Если вам нужно заставить fall-thru использовать "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
Ответ 3
С# не поддерживает неявное падение через конструкцию, но break
(или goto
), тем не менее, должен быть там (msdn). Единственное, что вы можете сделать, это стековые случаи следующим образом:
switch(something) {
case 1:
case 2:
//do something
break;
case 3:
//do something else
}
но break
(или другой оператор перехода, такой как goto
), должен быть там.
Ответ 4
В моем коде С# (.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();
}
... но с перерывами они серые, поэтому считаются спорными. Поэтому, по крайней мере, в моем случае они разрешены, но не требуются.