在SQL中,您可以编写类似的内容 if(value1,value2)中的值然后是...... else ...
在C#中编写
会很不错 A) if( value == (value1 or value2) ) { ... }
或者
B) if( value in (value1, value2) ) { ... }
当然你已经可以写了:
C) if( new[]{value1, value2}.Contains(value) )
但是这段代码构建一个新数组时速度很慢。
你最喜欢哪一个?
答案 0 :(得分:2)
如果value1
和value2
始终相同,我会构建一个集合(无论是集合,数组,列表还是其他),并将它们存储在静态变量中。< / p>
否则,我可能会写:
if (value == value1 || value == value2)
如果我有多个值,那么为了便于阅读,我将创建集合 - 但只有两个值我可能不会打扰 - 上面比数组创建表单IMO更可读。
如果我已经去了收集创建表单,那么我会考虑优化回到非收集创建表单,只有当我发现它时应用程序太慢,证明它是由于创建集合。
换句话说:
==
和||
进行比较很好)答案 1 :(得分:1)
如果只有两个或三个值,我会使用if (value == value1 || value == value2)
,否则你可以使用第三种方式,但如果数组不变,则使数组静止。
答案 2 :(得分:1)
取决于您希望实现的性能平衡和数据集的大小。
如果你能负担得起相对昂贵的构造和,那么查找绝对是关键性能和与构造相比,查找频繁发生< strong>和项目数量足以证明这一切,构建新的HashSet
,然后使用HashSet.Contains
。
另一方面,如果您只有很少的项目,那么if (value == value1 || value == value2 /* Etc.. */)
可能就足够了。请注意将您的值“排序”从最可能匹配到最不可能匹配。例如,如果value2
往往比value1
更频繁地匹配,请将上面的“if”重写为:if (value == value2 || value == value1)
,以便||
运算符可以执行其短路。 / p>
答案 3 :(得分:0)
这里的想法是当你有很少的非常数项时,有一个比IF系列更易于阅读的结构。 我建议C#团队在C#next中添加这样的结构:
if(value in(value1,value2)){...}
应扩展为临时集合并使用Contains,如果所有值都是常量,则使用const集合。