看来我需要在使用C#的switch语句中的每种情况下使用中断。C#switch/break
我可以看到其他语言的原因,你可以通过下一个case语句。
案例块是否可能落入其他案例块?
非常感谢,非常感谢!
看来我需要在使用C#的switch语句中的每种情况下使用中断。C#switch/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;
}
C#不支持通过构造隐式下降,但break
(或goto
)仍然在那里(msdn)。你能做的唯一的事情是堆栈情况如下方式:
switch(something) {
case 1:
case 2:
//do something
break;
case 3:
//do something else
}
但break
(或类似goto
另一个跳转语句),只需要在那里。
这不太准确。这不是一个“跳跃”声明(我认为你的意思是休息,继续,转身,返回或抛出)必须在最后,这是一个终点不可达的声明。所有的“跳转”语句都有这个属性,但也有其他的属性声明。例如,虽然很少,但用“while(true)M()”结束开关部分是完全合法的;“ – 2009-11-25 15:54:46
我看到MSDN文档不正确。我会和文档管理员谈一谈。 – 2009-11-25 15:55:40
的“破发”的执法是有停止的错误。如果您需要强制下降得来速然后用“的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
如果它不支持通过,那么就没有可以防止的错误。无论是否有休息,如果语言不支持通过,它不支持它,底线。编译'break'的时间执行;'并不妨碍你意外地通过,因为正如你所说,通过甚至不支持,所以这样的事故不会发生... – AaronLS 2014-05-06 19:17:04
在我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();
}
...但在,他们是灰色的休息时间,所以认为没有实际意义。所以,至少在我的情况下,他们被允许但不是必需的。
返回语句(以及抛出异常)原因离开完整方法的代码,这就是为什么不需要下面的break语句的原因。没有开关结构要离开了。 – Udontknow 2016-11-21 11:08:20
空案例陈述不合法,'case 1'不能反驳这一点。参见[Eric Lippert的解释](http://stackoverflow.com/questions/3047863/how-can-i-use-more-than-one-constant-for-a-switch-case-in-c/3049601#3049601 ),以及我的评论,提到为什么区别不是迂腐。告诉人们空白区块是合法的[导致他们犯错误](http://stackoverflow.com/q/8071655/18192)。 – Brian 2011-11-09 21:50:17
@Brian:如果你喜欢,你可以称它为别的东西,但上面的代码是完全合法的。从技术上讲,代码当然不会作为一系列代码块来实现,但在任何语言中都不是这样,对于大多数控制结构也是如此。你链接的错误根本不涉及空例(或者你喜欢称之为的任何东西),因为它不是空的。 – Guffa 2011-11-09 22:19:11