在C#中的if语句中测试多个值

C#中是否有简写语法来实现:

if ((x == 1) || (x==2) || (x==5) || (x==13) || (x==14)) 

……更短? 像(假设)的东西

 if (x in {1, 2, 5, 13, 14}) 

我“感觉”它就像它存在一样,我只是在精神上和Googly。 实际上,我必须经常测试一堆枚举,这是不可读的。 如果语言已经支持,我也讨厌做一个小帮手function。

提前致谢!

编辑

有一些聪明的解决方案涉及列表…但我希望有一种纯粹的逻辑结构。 如果它不存在,那就这样吧。 谢谢!

试试这个:

 if ((new[]{1, 2, 5, 13, 14}).Contains(x)) ... 

虽然我认为if语句很好,并且为了简洁而使代码简洁是没用的,这里有:

第一种方法,假设您想要进入LINQ路线:

 if ((new[]{1,2,5,13,14}).Contains(x)){ } 

第二种方法,ArrayList

 if ((new System.Collections.ArrayList(new[]{1,2,5,13,14})).Contains(x)){ } 

第三种方法,列表:

 if ((new System.Collections.Generic.List(new[]{1,2,5,13,14})).Contains(x)){ } 

但请记住, 所有这些都会增加更多开销(考虑到性能考虑,实际上并没有增加太多可读性)。

哦,以及上面的工作实例 。

我想建议使用HashSet(T)类来检查元素是否属于元素集。

此外,由于HashSet是一个关联容器,其查找复杂度为O(1),即常量时间: HashSet(Of T).Contains方法 ,而ArrayList具有线性时间查找:O(n) 。 因此, HashSet对于查找会更好。

 HashSet numbers = new HashSet { 1, 2, 5, 13, 14 }; int x = 1; if (numbers.Contains(x)) { Console.WriteLine("Contains!"); } 

不,没有像这样直接比较的支持。 但是,您可以使用LINQ方法,例如Contains()。 我可以提供一个示例,但它取决于数据项最初的存储方式。

你也许可以这样做:

 if( Array.LastIndexOf(new int[]{1, 2,3,4}, x) != -1) { //YOUR CODE HERE } 

未经测试,但我相信这会奏效。

编辑看起来已经发布了类似的回复。