是否有一种简洁的方法来检查int变量是否等于一系列整数? | C#

时间:2011-04-12 11:48:09

标签: c#

而不是像这样:

switch (id) {
case 2:
case 5:
case 11:
case 15:
...
}

是否有一种简洁的方法来检查int变量是否等于一系列整数中的任何一个?也许像if (id == {2|5|11|15}) ...

6 个答案:

答案 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();
        }
    }