C#开关/rest

看来我需要在使用C#的switch语句中的每个case块中使用break。

我可以在其他语言中看到这个原因,你可以通过下一个案例陈述。

案例块是否可能落入其他案例块?

非常感谢,非常感谢!

是的,您可以通过两种方式进入下一个案例块。 您可以使用不需要rest的空案例,也可以使用goto跳转到下一个(或任何)案例:

 switch (n) { case 1: case 2: case 3: Console.WriteLine("1, 2 or 3"); goto case 4; case 4: Console.WriteLine(4); break; } 

执行“rest”是为了阻止错误。 如果你需要强制下降然后使用“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#不支持隐式的fall through构造,但是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(); } 

……但随着中断,它们变灰了,所以被认为没有实际意义。 所以,至少在我的情况下,它们是允许的但不是必需的。