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

时间:2012-11-05 20:32:15

标签: c# c++ switch-statement

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

  

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

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

4 个答案:

答案 0 :(得分:16)

从技术上讲,这是不正确的:当case的主体为空时,C#确实允许掉线:

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;
}

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

答案 1 :(得分:15)

C#有goto case ,它具有穿透性的所有好处,但偶然难以做到。

Example on MSDN

答案 2 :(得分:4)

我认为这个论点是C ++中的switch语句通常会导致比他们解决的问题更多的问题。即当他们不是程序员的意图时,他们只是忘记了break。所以C#废除了它。

与C ++中的许多其他“功能”相同。并不是说它们偶尔也没用,只是它们更有害。就像评估任何东西作为一个bool一样,所以在C#中你做不到:

if(1) 
{

}

因为将整体评估为bool导致很多难以发现的错误。

答案 3 :(得分:1)

C#的版本不容易出错 - 如果你忘了写break,那么你的脸上什么都不会爆炸。它看起来也好一点。再说一遍,大部分时间都没有理由使用switch语句(通常它最终只是类型调度的一个糟糕的实现,它通过类继承内置于两种语言中)。