C#和C++中switch语句之间的差异

Abr*_*ham 15 c# c++ switch-statement

我刚刚开始自学C#,在关于Switch语句的教程中,我读到:

禁止执行流程从一个案例块流向下一个案例块的行为是C#与C++不同的一个区域.在C++中,允许case语句的处理从一个到另一个.

为什么它在C#中的一个案例陈述后停止?如果您可以break在任何时候使用该语句停止,那么在C#与C++之后是否有任何理由让它在找到匹配后停止?如果你想在C#中使用多个案例,你是否需要使用另一个Switch语句?

das*_*ght 16

从技术上讲,这是不正确的:C#确实允许在身体case空的时候掉头:

switch(val) {
case 1:
case 2:
    Console.WriteLine("small");
    break;
case 3:
case 4:
case 5:
case 6:
case 7:
    Console.WriteLine("medium");
    break;

 default:
    Console.WriteLine("large");
    break;
}
Run Code Online (Sandbox Code Playgroud)

在C/C++中非空体后允许隐式直通是错误地完成的.这就是为什么C#的设计者决定不允许它.

  • 当然上面的代码在C#中是合法的,但是你是否将它命名为"直通",取决于术语.根据C#Spec中使用的术语,上面的`switch`语句由三个_switch sections_组成.第一部分有两个_switch labels_,第二部分有五个标签,第三部分和最后一部分有一个标签.大括号`{...}`内的整个区域称为_switch block_.使用此术语,绝不允许从_section_到下一个_section_的转换.来源:[C#Spec](http://msdn.microsoft.com/en-us/library/ms228593.aspx) (2认同)

Ben*_*igt 15

C#具有goto case价值,它具有突破性的所有好处,但偶然难以做到.

MSDN上的示例