2016-02-18 21 views
0

大家都知道开关在C#中的情况下不允许您根据所选择的开关部分的语句列表的MSDN为什么砸锅开关的情况下编译C#

执行告吹开始第一声明并通过声明列表继续执行,直到达到跳转声明(例如中断,转到,返回或抛出)为止。此时,控制权被转移到switch语句之外或者转移到另一个案例标签。

与C++不同,C#不允许执行从一个开关 节继续到下一节。以下代码会导致错误。

如果那为什么会发生这种编译的情况:

void Main() 
{ 
    int s = 3; 
    switch (s) 
    { 
     case 1: 
     case 2: 
     case 3: 
      Console.WriteLine("hit 3"); 
      break; 
    } 
} 

不应该这样被认定为编译时错误?

+4

通过* is *允许,但仅限于空案例语句,如本例中所示。这不应该引发运行时异常。这段代码很好。 –

+0

@Dennis_E - 这不是彻底的,但是,它是有效的 – Amit

回答

6

首先,您提供的代码不会引发运行时错误。其次,它属于下一个不同的类别(来自相同MSDN文章,重点煤矿):

switch语句可以包括任何数量的开关部,并且每个 部可以具有一个或多个的情况下标签(如如下所示的字符串案例 标签示例)。但是,没有两个案例标签可能包含相同的常数值。

区别在于您是否有多个空的case陈述,这是允许的。但是你不能有一个带有代码的case,并让它通过。

+2

这在VB.Net中更为明显,它的语法沿着'case 1,2,3,4: –

相关问题