在C#中切换语句

Pau*_*els 15 c# switch-statement

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

例如:

switch (x)
{
   case 1:
     //do something
     break;
   case 2..8:
     //do something else
     break;
   default:
     break;
}
Run Code Online (Sandbox Code Playgroud)

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

case <= 8:
Run Code Online (Sandbox Code Playgroud)

And*_*lam 25

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

固定编码:

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;
}
Run Code Online (Sandbox Code Playgroud)

结合if {}声明:

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

  • +1表示第二个例子.第一个让我想伤害别人.:) (2认同)

Pau*_*els 8

虽然当我最初问这个问题时这是不可能的,但通过 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;
}
Run Code Online (Sandbox Code Playgroud)

关于该主题的博客文章


Mar*_*tos 6

不,但你可以写这个,所以你至少要避免// 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;
}
Run Code Online (Sandbox Code Playgroud)