在C#中切换语句

时间:2010-03-31 11:37:33

标签: c# switch-statement

是否有人知道是否可以在switch语句中包含范围(如果是,如何)?

例如:

switch (x)
{
   case 1:
     //do something
     break;
   case 2..8:
     //do something else
     break;
   default:
     break;
}

编译器似乎不喜欢这种语法 - 它也不喜欢:

case <= 8:

10 个答案:

答案 0 :(得分:24)

不,这是不可能的。我过去有过几种方法:

固定编码:

switch (x)
{
   case 1:
     //do something
     break;
   case 2:
   case 3:
   case 4:
   case 5:
   case 6:
   case 7:
   case 8:
     //do something else
     break;
   default:
     break;
}

结合if {}声明:

switch (x)
{
   case 1:
     //do something
     break;
   default:
     if (x <= 8)
     {
        // do something
     }
     else
     {
       // throw exception
     }
     break;
}

答案 1 :(得分:5)

不,但你可以这样写,所以你至少要避免多次写// do something else部分。

switch (x)
{
   case 1:
     //do something
     break;
   case 2: case 3: case 4: case 5: case 6: case 7: case 8:
     //do something else
     break;
   default:
     break;
}

答案 2 :(得分:3)

简短回答:。可以在那里写下所有案例,但不支持这样的范围表示法。

我认为您必须在此处使用if语句,或者切换到能够更好地支持案例歧视的语言。

答案 3 :(得分:2)

如果您的案例很少,则if会更受欢迎。

答案 4 :(得分:2)

一种可能性是将范围转换为整数。例如:

//assuming x>=9 or if (x <= 0) return;
        switch((x+12)/7)
        {   case 1:Console.WriteLine("one");
                break;
            case 2:Console.WriteLine("2 through 8 inclusive");
                break;
            case 3:Console.WriteLine("9 through 15 inclusive");
                break;
            default: Console.WriteLine("16 or more");
                break;
        }

答案 5 :(得分:2)

虽然当我最初提出这个问题时,通过C#模式匹配的奇迹,这是不可能的,但它现在是(在C#7中):

switch (i)
{
    case var test when test <= 2:
        Console.WriteLine("Less than 2");
        break;

    case var test when test > 2 && test < 10:
        Console.WriteLine("Between 2 and 10");
        break;

    case var test when test >= 10:
        Console.WriteLine("10 or more");
        break;
}

A blog post on the subject

答案 6 :(得分:1)

您可以根据具体情况处理显式案例,如果您只有一个范围,则在默认情况下处理它。

答案 7 :(得分:-1)

你可以做到

case 2:
case 3:
case 4:
...
case 8:
 // code here
 break

答案 8 :(得分:-1)

您可以使用案例:

switch (x)
{
   case 1:
     //do something
     break;
   case 2:
   case 3:
   case 4:
   case 5:
   case 6:
   case 7:
   case 8:
     //do something else
     break;
   default:
     break;
}

但我只是为此而使用。

答案 9 :(得分:-1)

您不能在切换案例中使用任何条件语句。

如果你想为不同的选项执行相同的代码行,那么你可以做一件事:

switch (i)
            {
                case 0:
                case 1:
                case 2: 
                case 3:
                    //do something here.
                    break;
                default:
                    //do something here.
                    break;
            }