如果可以在C#中的“ case”中放入几个值

时间:2020-09-05 11:12:01

标签: c# switch-statement

是否可以在案例中放入几个值?

Switch(colorCode)
        {
          case (colorCode > 1 && colorCode < 5)
             color = red;
          case (colorCode > 6 && colorCode < 9)
             color = green;
          case (colorCode > 10 && colorCode < 15)
             color = blue;
        }

4 个答案:

答案 0 :(得分:3)

使用when关键字:

    int colorCode = 4;
    string color = "";
    switch(colorCode)
    {
        case int i when (i > 0 && i <= 3):
            color = "red";
            break;
        case int i when (i > 3 && i <= 6):
            color = "green";
            break;
        case int i when (i > 6 && i <= 9):
                color = "blue";
            break;
    }

ps:别忘了打破你的案情声明

答案 1 :(得分:1)

与其他答案相反,这在C#7中确实是可能的:

Color color;

switch(n)
{
  case int m when m >= 1 && m <= 3:
    color = Color.red; break;
  case int m when m >= 4 && m <= 6:
    color = Color.blue; break;
  case int m when m >= 7 && m <= 9:
    color = Color.green; break;
  default:
    color = Color.other; break;
}

我不一定建议以这种方式滥用类型模式开关,但严格来说可以做到这一点。

一种更清晰的方法是使用if / else if / else块:

if(n > = 1 && n <= 3)
{
  color = Color.red;
}
else if(n >= 4 && n <= 6)
{
  color = Color.blue;
}
else if (n >= 7 && n <= 9)
{
  color = Color.green;
}
else
{
  color = Color.other;
}

答案 2 :(得分:0)

是,不是

有可能从一个case语句跳转到另一个case语句, 但是无法设置范围(对于C#或更高版本5)。

调整后的代码如下:

    switch(colorCode)
    {
      case 1: 
      case 2: 
      case 3: 
         color = red;
         break;
      case 4: 
      case 5: 
      case 6: 
         color = green;
         break;
      case 7: 
      case 8: 
      case 9: 
         color = blue;
         break;

    }

(我假设您想根据您使用<>进行的比较来包含边框值,例如1,3、4、6等),

答案 3 :(得分:0)

看来您的代码是一种非常冗长的方法:

color = colorCode == 8
  ? blue
  : colorCode == 5
    ? green
    : colorCode == 2
      ? red
      : color ;

我不确定您在问题中显示的内容是否真的可以满足您的要求。假设colorCode是一个整数,> 1 && <3就是== 2。