如何在C#中使用多于一个常量的开关情况?
我怎样才能使用多个常量的开关情况C#? 从概念上讲,我正在寻找这样的东西:
switch(n)
{
case 1,2,3: //????
case 4:
default:
}
你不这样做,你会用掉落式的。
switch( n )
{
case x:
case y:
case z:
DoSomething( );
break;
case blah:
break;
}
许多答案都表示,“如果案件为空,则通过合法途径是合法的”。
这是不正确的。 这是考虑它的错误方式。 这是推理,就好像C#是C,事实并非如此。 在C语言中,每个case标签都有一个关联的语句列表,可能是空的,并且控制在语句列表结尾处“落下”。 这在C#中都不是这种情况。
在C#中,一个开关由多个部分组成,每个部分都有一个或多个案例标签,每个部分都有一个或多个语句。 当你说
switch(x)
{
case 1:
case 2:
M();
break;
}
情况并非如此,有两个开关部分,一个用于情况1和一个用于情况2,而情况1的开关部分是空的并落入第二个模块。 这将是C的情况,但C#不是C.
在C#中,在这个例子中有一个开关部分。 它有两个标签和一个语句列表。 案件标签之间没有空的陈述清单; 不可能是因为语句列表在该部分中的最后一个标签之后。 让我重复一遍:不是那里有一个空的陈述列表。 根本没有声明列表,甚至没有空的声明列表。
这种表征使我们能够清楚地陈述C#中的“贯穿始终是非法的”时期的贯穿规则。 再一次,控制从案例1的空陈述清单到“案例2”不是“通过”的情况。控制永远不会经过。 控制不会经过这里,因为控制从未进入情况1之后的空语句列表。控制无法进入该空语句列表,因为首先没有空语句列表。 声明清单直到案例2之后才开始。
C#在每个开关部分(包括最后一个开关部分)中强制执行no-fall-through规则。 这样就可以通过机械工具任意重新排序开关部分,而不会在程序中引入语义变化。
C#通过要求每个开关部分的终点无法访问来强制执行不遵守规则。 切换部分不需要中断。 它可以在休息,返回,转到,继续,抛出或可检测到的无限循环中结束:
switch(x)
{
case 1:
while(true) M();
case 2:
return 123;
case 3:
throw new Exception();
case 4:
M();
goto case 3;
}
以上所有都是合法的; 没有休息。
switch(n)
{
case 1:
case 2:
case 3:
// do something
break;
default:
break;
}
链接地址: http://www.djcxy.com/p/84449.html
上一篇: How can I use more than one constant for a switch case in C#?
下一篇: Why does integer overflow on x86 with GCC cause an infinite loop?