看来我需要在使用C#的switch语句的每个case块中使用一个break。
我可以用其他语言查看原因,在这里您可以深入了解下一个case语句。
案例块是否有可能掉入其他案例块?
非常感谢,非常感谢!
是的,您可以通过两种方式进入下一个案例块。您可以使用不需要中断的空案例,也可以使用goto
跳转到下一个(或任何一个)案例:
switch (n) {
case 1:
case 2:
case 3:
Console.WriteLine("1, 2 or 3");
goto case 4;
case 4:
Console.WriteLine(4);
break;
}
“ break”的执行可以阻止错误。如果您需要强制通过,请使用“ 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
C#不支持隐式直通构造,但是break
(或goto
)仍然必须存在(msdn)。您唯一可以做的就是按照以下方式处理堆叠箱:
switch(something) {
case 1:
case 2:
//do something
break;
case 3:
//do something else
}
但是break
(或另一个跳转语句,例如goto
)只需要在那儿。
在我的C#(.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();
}
...但是随着中断,它们变灰,因此被认为是没有意义的。因此,至少就我而言,它们是允许的,但不是必需的。