C#中的开关与下一个非结合的情况是空的

使用以下代码:

case "GETSITES":
case "SITESETUP":
    MessageBox.Show("Help! I am suffering from the Air-Conditioned Nightmare!!!");
    // ...

将执行MessageBox.Show或者开关值是"GETSITES""SITESETUP"

或者只有当开关值是"SITESETUP"

由于"GETSITES"没有休息,我想是的,但我不确定。


UPDATE

我想我应该把我的问题写成:

这两个代码片段在语义上是否相同?

  • 片段1

    case 0:
    case 1:
        // bla bla bla;
        break;
    
  • 片段2(伪代码)

    case 0, 1:
        // bla bla bla;
        break;
    

  • 你所描述的是在同一个案件中有两个标签。 C#确实允许这样做。 但是,您不能像C允许的那样处理下一个case语句,也就是说,您的标签不能有一些代码,然后转到下一个case语句。 这是被禁止的,并会导致编译错误。


    C#中的空案例语句与下一个非空语句语句结合在一起吗?

    我原本说:

    这个问题假设是虚假的。 在合法的C#程序中不存在空开关部分。

    这不完全正确。 C#规范要求开关部分至少包含一个语句,但实际上并没有。

    我声明如下:

    这个问题假设有一个空的开关部分(注意开关部分不是语句),但是在非常不寻常的情况下只能有一个空的开关部分。 首先,让我们清楚地描述switch语句的解析。

    当你有:

    switch(x) 
    { 
       case 1: 
       case 2: 
           Console.WriteLine("Hello");
           break;
    }
    

    只有一个开关部分。 案例1之后没有“空白部分”; 一个部分由所有的情况条款组成,后面跟零个或多个陈述。 (规范要求一个或多个语句,但实现实际上允许使用零语句。)语句列表必须具有不可达的端点。

    有一个空的语句列表,其终点在切换部分内不可访问的唯一方法是切换部分本身无法访问。 有两种方式可以发生。 整个交换机可能无法到达,或者交换机可能打开一个常量。 总之,制作一个空的开关部分的唯一方法是:

    switch(1) { case 2: }
    

    要么

    if (false) switch(x) { case 2: }
    

    根据规范,两者都不合法,但C#编译器允许这两者。 幸运的是,这是一个非常无害的错误。

    在这两种情况下,该部分的终点都不可达,因此空白部分是可到达的。 但情况之间并不存在空白部分。


    基于测试,您可以执行以下操作:

    switch(i)
    {
        case 0:
        case 1:
        case 2:
            doSomething();
            break;
        default:
            doNothing();
            break;
    }
    

    但你不能:

    switch(i)
    {
       case 0:
          doSomething();
       case 1:
          doSomethingElse();
          break;
       default:
          doNothing();
          break;
    }
    

    所以,答案是肯定的,你可以将多个案例叠加在一起,但是你不能让控制权从一个案件运行到另一个案件。

    链接地址: http://www.djcxy.com/p/84497.html

    上一篇: Is empty case of switch in C# combined with the next non

    下一篇: Use for loop with if and else