C-在条件语句中重构多个OR

时间:2018-07-19 15:22:42

标签: c if-statement refactoring

在这样的示例中,是否有更好/更好的方法来重构所有条件语句?

if (memberStatus == bronze || memberStatus == silver || memberStatus == gold) {
    return 1;
}
return 0;

2 个答案:

答案 0 :(得分:4)

实现这一目标的典型方法:

switch (memberStatus) {
  case bronze:
  case silver:
  case gold:
    // Your code here.
    break; // Don't forget this or it'll "chain through" into the next section
  default:
    // If none of those matched.
}

如果您只是强制使用return 1,则不需要break,则可以返回。除非用switchbreak明确中止,否则return将链接到下一部分。

答案 1 :(得分:1)

return memberStatus == bronze || memberStatus == silver || memberStatus == gold;

是显而易见的方法。

尽管你有类似的东西

int metal = bronze | silver | gold;

bronzesilvergold具有互斥的1位,一旦进行任何数字转换(以及其他可能性),则可以编写

return memberStatus & metal;

实际上,metal将是enum的一部分,其中也包含其他值;我在这里使用int来允许编译器为我提供适当的类型,如果以上只是缩小转换范围,则可能不是这种情况;为了强调您希望bronzesilvergold是同一enum的一部分,或者如果不是,则使用相同的类型。