如何为开关盒C#使用多个常量?从概念上讲,我正在寻找这样的东西:
switch(n)
{
case 1,2,3: //????
case 4:
default:
}
Run Code Online (Sandbox Code Playgroud)
Eri*_*ert 36
许多答案都表示,"如果案件是空的,则可以合法审理".
这是不正确的.这是错误的思考方式.这就是推理,好像C#是C,但事实并非如此.在C中,每个case标签都有一个关联的语句列表,可能是空的,并且控制"掉落"在语句列表的末尾.在C#中没有这种情况.
在C#中,交换机由许多部分组成,每个部分都有一个或多个案例标签,每个部分都有一个或多个语句.当你说
switch(x)
{
case 1:
case 2:
M();
break;
}
Run Code Online (Sandbox Code Playgroud)
不是有两个开关部分的情况,一个用于壳体1,一个用于壳体2,并且用于壳体1的开关部分是空的并且落到第二块.这将是C中的情况,但C#不是C.
在C#中,在这个例子中有一个开关部分.它有两个标签和一个声明列表.案例标签之间没有空的陈述列表; 不可能,因为语句列表遵循该部分中的最后一个标签.让我再说一遍:那里不存在空语句列表.根本没有语句列表,甚至没有空语句列表.
这种描述使我们能够清楚地说明C#中的"跌倒永远是非法的 "期限.同样,控制从案例1的空语句列表到案例2的情况并非如此.控制永远不会失败.控制不会落在此处,因为控件永远不会在案例1之后进入空语句列表.Control无法输入该空语句列表,因为首先没有空语句列表.声明列表直到案例2之后才开始.
C#在每个交换机部分中强制执行no-fall-through规则,包括最后一个.这样可以通过机械工具任意地重新排序开关部分,而不会在程序中引入语义变化.
C#通过要求每个交换机部分的端点不可达来强制执行无掉落规则.开关部分不必在休息时结束.它可以以break,return,goto,continue,throw或可检测的无限循环结束:
switch(x)
{
case 1:
while(true) M();
case 2:
return 123;
case 3:
throw new Exception();
case 4:
M();
goto case 3;
}
Run Code Online (Sandbox Code Playgroud)
以上所有都是合法的; 没有休息.
drh*_*ris 15
switch(n)
{
case 1:
case 2:
case 3:
// do something
break;
default:
break;
}
Run Code Online (Sandbox Code Playgroud)
c#中最接近的开关案例:
switch(n)
{
case 1:
// Do something
goto case 2;
case 2:
// Do something
goto case 3;
case 3:
// Do something
break;
default:
break;
}
Run Code Online (Sandbox Code Playgroud)
有关详情,请参阅此处:
http://msdn.microsoft.com/en-us/vcsharp/aa336815.aspx
你没有,你使用直通.
switch( n )
{
case x:
case y:
case z:
DoSomething( );
break;
case blah:
break;
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2657 次 |
| 最近记录: |