如何为开关盒C#使用多个常量?从概念上讲,我正在寻找这样的东西:
switch(n)
{
case 1,2,3: //????
case 4:
default:
}
答案 0 :(得分:35)
许多答案都表示,如果案件是空的,那么“通过是合法的”。
这不正确。这是错误的思考方式。这就是推理,好像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 之后进入空语句列表。 Control无法输入该空语句列表,因为首先没有空语句列表。声明列表直到案例2之后才开始。
C#强制执行每个切换部分中的禁止删除规则,包括最后一个。这样可以通过机械工具任意重新排序开关部分,而不会在程序中引入语义变化。
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;
}
以上所有都是合法的;没有休息。
答案 1 :(得分:15)
switch(n)
{
case 1:
case 2:
case 3:
// do something
break;
default:
break;
}
答案 2 :(得分:7)
c#中的最接近的切换案例:
switch(n)
{
case 1:
// Do something
goto case 2;
case 2:
// Do something
goto case 3;
case 3:
// Do something
break;
default:
break;
}
有关详细信息,请参阅此处:
答案 3 :(得分:5)
你没有,你使用堕落。
switch( n )
{
case x:
case y:
case z:
DoSomething( );
break;
case blah:
break;
}
答案 4 :(得分:3)
试试这个:
switch(n)
{
case 1:
case 2:
case 3:
//Do Stuff
break;
case 4:
//Do more stuff
break;
default:
//Do standard stuff
break;
}
请注意,仅当case 1:
或case 2:
blocks.i
答案 5 :(得分:0)
您可以这样做:
switch(n)
{
case 1: case 2: case 3:
break;
case 4:
break;
default:
break;
}