0

众所周知,c# 中的 switch case 不允许您根据MSDN失败

所选 switch 部分中的语句列表的执行从第一条语句开始并继续执行语句列表,通常直到到达跳转语句,例如 break、goto case、return 或 throw。此时,控制转移到 switch 语句之外或转移到另一个 case 标签。

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

如果是这样,为什么要编译:

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

这不应该被识别为编译时错误吗?

4

1 回答 1

8

首先,您提供的代码不会引发运行时错误。其次,它属于不同的类别(来自同一篇 MSDN 文章,强调我的):

一个 switch 语句可以包含任意数量的 switch 部分,每个部分可以有一个或多个 case 标签(如下面的字符串 case 标签示例所示)。但是,没有两个 case 标签可能包含相同的常量值。

不同之处在于您是否有多个空case语句,这是允许的。但是您不能在其中包含case带有代码,然后让它失败。

于 2016-02-18T22:36:59.873 回答