而不是像这样:
switch (id) {
case 2:
case 5:
case 11:
case 15:
...
}
是否有一种简洁的方法来检查int变量是否等于一系列整数中的任何一个?也许像if (id == {2|5|11|15}) ...
?
答案 0 :(得分:7)
您可以将所有内容放入HashSet并执行包含。
Hashset<int> ids = new HashSet<int>() {...initialize...};
if(ids.Contains(id)){
...
}
答案 1 :(得分:4)
if((new List<int> { 2, 5, 11, 15}).Contains(id))
但是你可能不想每次都创建一个新的List
实例,所以最好在你的类的构造函数中创建它。
答案 2 :(得分:2)
你可以尝试:
List<int> ints = new List<int> {2, 5, 11, 15};
if (ints.Contains(id))
{
}
虽然它可能比做开关慢。
但是,它确实具有以下优点(假设您从数据中初始化列表),您可以使用它来检查任何整数值列表,并且不限于硬编码值。
答案 3 :(得分:1)
如果你的目标是简明扼要。
//
(new []{2, 5, 11, 15}).Contains(id)
//
如果你想要快速可能坚持使用开关。
我想我喜欢HashSet。
答案 4 :(得分:0)
也许是使用LINQ的解决方案:
List<int> ints = new List<int> {2, 5, 11, 15};
void Search(int s) {
int result = ints.Where(x => x == s).FirstOrDefault();
}
答案 5 :(得分:0)
您可以这样做:
bool exist = List.Init(6, 8, 2, 9, 12).Contains(8);
foreach (int i in List.Init(6, 8, 2, 9, 12))
{
Console.WriteLine(i.ToString());
}
public class List : IEnumerable<int>
{
private int[] _values;
public List(params int[] values)
{
_values = values;
}
public static List Init(params int[] values)
{
return new List(values);
}
public IEnumerator<int> GetEnumerator()
{
foreach (int value in _values)
{
yield return value;
}
}
public bool Contains(int value)
{
return Array.IndexOf(_values, value) > -1;
}
System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator()
{
return GetEnumerator();
}
}