C#中是否有简写语法来实现:
if ((x == 1) || (x==2) || (x==5) || (x==13) || (x==14))
......更短?像(假设)
的东西if (x in {1, 2, 5, 13, 14})
我“觉得”它存在,我只是在精神上和Googly。实际上,我必须经常测试一堆枚举,这是不可读的。如果语言已经支持,我也讨厌做一个小帮手功能。
提前致谢!
修改
有一些涉及列表的聪明解决方案......但我希望有一种纯粹的逻辑结构。如果它不存在,那就这样吧。谢谢!
答案 0 :(得分:12)
试试这个:
if ((new[]{1, 2, 5, 13, 14}).Contains(x)) ...
答案 1 :(得分:2)
虽然我认为if语句没问题,并且为了breifness而使代码简短是没用的,这里有:
第一种方法,假设您想要进入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<Int32>(new[]{1,2,5,13,14})).Contains(x)){
}
但请记住所有这些会增加更多开销(考虑到性能因素,实际上并没有增加多少可读性)。
答案 2 :(得分:2)
我建议使用HashSet(T) Class检查元素是否属于元素集。
此外,由于HashSet<T>
是一个关联容器,其查找复杂度为O(1),即恒定时间:HashSet(Of T).Contains Method,而Array
和List<T>
具有线性时间查找:O(n)。因此,HashSet<T>
对于查找会更好。
HashSet<int> numbers = new HashSet<int> { 1, 2, 5, 13, 14 };
int x = 1;
if (numbers.Contains(x))
{
Console.WriteLine("Contains!");
}
答案 3 :(得分:0)
不,没有像这样直接比较的支持。但是,您可以使用LINQ方法,例如Contains()。我可以提供一个示例,但它取决于数据项最初的存储方式。
答案 4 :(得分:0)
你也许可以这样做:
if( Array.LastIndexOf(new int[]{1, 2,3,4}, x) != -1)
{
//YOUR CODE HERE
}
未经测试,但我相信这会奏效。
修改的 看起来已经发布了类似的回复。