首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用switch语句失败(有时有效?)

问使用switch语句失败(有时有效?)
EN

Stack Overflow用户
提问于 2012-09-12 22:17:19
回答 7查看 1.5K关注 0票数 2

我有一个如下所示的switch语句:

代码语言:javascript
复制
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语句失效并执行一些中间代码呢?

EN

回答 7

Stack Overflow用户

回答已采纳

发布于 2012-09-12 22:19:59

堆叠标签和漫游是有区别的。

C#支持前者:

代码语言:javascript
复制
case 0:
case 1:
    break;

但不是失败:

代码语言:javascript
复制
case 2:
    // Do Something
case 3:
    // Do Something
    break;

如果你想直截了当,你需要明确:

代码语言:javascript
复制
case 2:
    // Do Something
    goto case 3;
case 3:
    // Do Something
    break;

原因是显而易见的,隐含的失败可能导致不干净的代码,特别是如果你有超过一到两行,并且不再清楚控制如何流动。通过强制显式遍历,您可以轻松地跟随流程。

参考:msdn

票数 10
EN

Stack Overflow用户

发布于 2012-09-12 22:19:10

报价MSDN:

"C#不支持从一个case标签隐式切换到另一个case标签。一个例外情况是case语句没有代码。“

基本上,将语句放在case中而不包括break是不合法的。

代码语言:javascript
复制
case 1:
case 2:
//do stuff
break;

是合法的吗

但是:

代码语言:javascript
复制
case 1:
//do stuff without a break
case 2:
//do stuff
break; 

不是。

http://msdn.microsoft.com/en-us/library/06tc147t(v=vs.80).aspx

票数 3
EN

Stack Overflow用户

发布于 2012-09-12 22:19:22

您不会从case 0掉到case 1,因为它们共享相同的代码块。这与在case 0之前编写case 1是一样的。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12390245

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档