我刚开始自学C#,在关于Switch语句的教程中,我读到了:
禁止执行流程的行为 从一个案例块到下一个案例块是C#与之不同的一个区域 C ++。在C ++中,允许从中运行case语句的处理 一个接一个。
为什么它在C#中的一个case语句后停止?如果您可以在任何时候使用break
语句停止,C#与C ++之间是否有任何理由让它在找到匹配后停止?如果你想在C#中使用多个案例,你是否需要使用另一个Switch语句?
答案 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
值,它具有穿透性的所有好处,但偶然难以做到。
答案 2 :(得分:4)
我认为这个论点是C ++中的switch语句通常会导致比他们解决的问题更多的问题。即当他们不是程序员的意图时,他们只是忘记了break
。所以C#废除了它。
与C ++中的许多其他“功能”相同。并不是说它们偶尔也没用,只是它们更有害。就像评估任何东西作为一个bool一样,所以在C#中你做不到:
if(1)
{
}
因为将整体评估为bool导致很多难以发现的错误。
答案 3 :(得分:1)
C#的版本不容易出错 - 如果你忘了写break
,那么你的脸上什么都不会爆炸。它看起来也好一点。再说一遍,大部分时间都没有理由使用switch语句(通常它最终只是类型调度的一个糟糕的实现,它通过类继承内置于两种语言中)。