74

有没有办法在不复制和粘贴的情况下将两个不同的 case 值分配给同一个代码块?例如,68 和 40 以下应该执行相同的代码,而 30 则不相关。

case 68:
   //Do something
break;

case 40:
   //Do the same thing
break;

case 30:
   //Do something different
break;

认为这样的事情应该起作用是不正确的(即使它显然不起作用)?

case 68 || 40:
   //Do something
break;

case 30:
   //Do something else
break;
4

6 回答 6

203

只需将它们紧挨着放在一起就可以了

switch (myVar) {
  case 68:
  case 40:
    // Do stuff
  break;

  case 30:
    // Do stuff
  break;
}
于 2011-09-26T18:30:34.027 回答
20

是的,您只需将相关case语句并排放置,如下所示:

case 40:  // Fallthrough
case 68:
   // Do something
   break;

case 30:
   // Do something different
   break;

Fallthrough评论有两个原因:

  • 它使人类读者放心,您是故意这样做的
  • 它使来自类似 Lint 的工具发出的警告静音,这些工具发出有关可能意外失败的警告。
于 2011-09-26T18:30:30.750 回答
4
case 68:
case 40:
  // stuff
  break;
于 2011-09-26T18:30:18.033 回答
1

更清洁的方法

if ([68, 48, 22, 53].indexOf(value) > -1)
    //Do something
else if ([44, 1, 0, 24, 22].indexOf(value) > -1)
    //Do another

您可以对具有相同结果的多个值执行此操作

于 2021-09-07T13:21:20.843 回答
0

开关盒可以像挖掘中所示的那样被杵。

此外,它不仅限于两种情况,您可以将其扩展到任何否。的案例。

于 2016-10-02T06:44:04.157 回答
-14

你应该使用:

switch condition {
  case 1,2,3:
    // do something
  case 4,5:
    // do something
  default:
    // do something
}

大小写应以逗号分隔。

于 2017-05-12T16:24:29.450 回答