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