关于c#:确定变量是否等于“列表”值的最简洁方法

Most succinct way to determine if a variable equals a value from a 'list' of values

如果C中有一个变量需要检查以确定它是否等于一组变量中的一个,那么最好的方法是什么?

我不是在寻找一个将集合存储在数组中的解决方案。我更好奇的是,是否有一个解决方案在某种程度上使用布尔逻辑来得到答案。

我知道我可以这样做:

1
2
int baseCase = 5;
bool testResult = baseCase == 3 || baseCase == 7 || baseCase == 12 || baseCase == 5;

我很想知道我是否可以做更多这样的事情:

1
2
int baseCase = 5;
bool testResult = baseCase == (3 | 7 | 12 | 5);

显然,上面的方法不起作用,但是我有兴趣看看是否有比我的第一个示例更简洁的东西,它必须对每个测试值重复相同的变量。

更新:我决定接受科琳的回答,因为这似乎是最简单的方法。我认为,这很实用,而且对新手来说还是很容易理解的。

不幸的是,在我工作的地方,我们的系统使用.NET 2.0框架,很快就没有升级的机会。除了我能想到的最明显的解决方案外,还有其他不依赖.NET 3.5框架的解决方案吗?

1
new List<int>(new int[] { 3, 6, 7, 1 }).Contains(5);


1
        bool b = new int[] { 3,7,12,5 }.Contains(5);

利用T数组实现IList和IList具有contains方法这一事实,可以对.NET 2.0执行类似的操作。因此,以下内容相当于Corey的.NET 3.5解决方案,但显然不太清楚:

1
bool b = ((IList<int>)new int[] { 3, 7, 12, 5 }).Contains(5);

我经常将ilist用于数组声明,或者至少用于传递一维数组参数。这意味着您可以使用ilist属性(如count),并轻松地从数组切换到列表。例如.

1
private readonly IList<int> someIntegers = new int[] { 1,2,3,4,5 };


我通常用科琳的解决方案来解决类似的简单情况。如果需要更复杂的内容,请使用LINQ查询。


由于您没有指定输入的数据类型,我假设您可以将输入划分为2->2,4,8,16的幂…这将允许您使用位来确定您的测试值是否是输入中的位之一。

4=000010016=001000064=1000000

使用二进制数学…

测试列表=4+16+64=>1010100测试值=16测试结果=测试列表和测试值