【发布时间】:2016-06-29 15:47:27
【问题描述】:
背景:
通常,我们开发人员必须检查单个变量是否至少是多个选项之一。例如,
if ( (data == 125) || (data == 500) || (data == 750) )
{
/* ... do stuff ...*/
}
建议 here(尽管是用 C# 编写的)提供了一个优雅的解决方案,可以像这样使用 switch 语句,
switch ( data )
{
case 125:
case 500:
case 750:
/* ... do stuff ...*/
break;
default:
/* ... do nothing ... */
break;
}
这适用于“或”条件,但对于否定的“或”条件则很难看,如下所示,
if ( !( (data == 125) || (data == 500) || (data == 750) ) )
{
/* ... do stuff ...*/
}
可以写成
switch ( data )
{
case 125:
case 500:
case 750:
/* ... do nothing ... */
break;
default:
/* ... do stuff ...*/
break;
}
而且看起来有点老套。
问题:
是否有更简洁的方法来检查单个变量是否没有多个选项,例如上面的否定“或”条件?
参考资料:
【问题讨论】:
-
我更喜欢你的最后一个代码示例。那里发生了什么非常清楚。
-
是否只是因为工作是在
default标签之后完成的,而不是在失败中完成的?我不会同意的。 -
关于什么是“最多”或“最好”的问题,最好的代码风格,最好的维护风格,最简单的源代码,最便携,最快,最少的源代码,最少的可执行代码,最少的内存是竞争因素。明确编码目标有助于得出最佳答案。 “最简洁”听起来像 code golf,我敢肯定这不是本意。
-
我也更喜欢你的第二个例子。鉴于您在“排除案例”(您没有)中提供了“什么都不做”评论,所以很清楚发生了什么 - 不是一点点“hackish”恕我直言。
-
感谢@tofro,我已添加您的建议以提高问题的清晰度。
标签: c if-statement comparison