我有一个如下所示的switch语句:
switch (condition)
{
case 0:
case 1:
// Do Something
break;
case 2:
// Do Something
case 3:
// Do Something
break;
}我收到一个编译错误,告诉我Control cannot fall through from one case label ('case 2:') to another
好吧..。是的你可以。因为您从case 0:一直到case 1:都在这么做。
事实上,如果我删除我的case 2:和它的相关任务,代码就会编译,并从case 0:进入case1:。
那么这里发生了什么,我如何才能让我的case语句失效并执行一些中间代码呢?
发布于 2012-09-12 22:19:59
堆叠标签和漫游是有区别的。
C#支持前者:
case 0:
case 1:
break;但不是失败:
case 2:
// Do Something
case 3:
// Do Something
break;如果你想直截了当,你需要明确:
case 2:
// Do Something
goto case 3;
case 3:
// Do Something
break;原因是显而易见的,隐含的失败可能导致不干净的代码,特别是如果你有超过一到两行,并且不再清楚控制如何流动。通过强制显式遍历,您可以轻松地跟随流程。
参考:msdn
发布于 2012-09-12 22:19:10
报价MSDN:
"C#不支持从一个case标签隐式切换到另一个case标签。一个例外情况是case语句没有代码。“
基本上,将语句放在case中而不包括break是不合法的。
case 1:
case 2:
//do stuff
break;是合法的吗
但是:
case 1:
//do stuff without a break
case 2:
//do stuff
break; 不是。
http://msdn.microsoft.com/en-us/library/06tc147t(v=vs.80).aspx
发布于 2012-09-12 22:19:22
您不会从case 0掉到case 1,因为它们共享相同的代码块。这与在case 0之前编写case 1是一样的。
https://stackoverflow.com/questions/12390245
复制相似问题