如何在C#中为一个开关盒使用多个常量?

时间:2010-06-15 18:17:22

标签: c#

如何为开关盒C#使用多个常量?从概念上讲,我正在寻找这样的东西:

switch(n)
{
   case 1,2,3:     //????
   case 4:
   default:
}

6 个答案:

答案 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;
}

有关详细信息,请参阅此处:

http://msdn.microsoft.com/en-us/vcsharp/aa336815.aspx

答案 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;
}