2008-08-20 21 views
9

如果我有一个C#中的变量需要检查,以确定它是否等于一组变量之一,什么是最好的方法来做到这一点?最简洁的方式来确定一个变量是否等于值的“列表”值

我不是在寻找一个将数组存储在数组中的解决方案。我更好奇看看是否有解决方案以某种方式使用布尔逻辑来获得答案。

我知道我可以做这样的事情:

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

我很好奇,看看我能不能做更多的事情是这样的:

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

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

UPDATE:
我决定接受CoreyN的答案,因为它似乎是最简单的方法。我认为这是实用的,对于初学者来说,仍然很简单。

不幸的是,在我工作的系统中,我们的系统使用了.NET 2.0框架,并且很快就没有升级的机会。是否有任何其他的解决方案,在那里,不依赖于.NET 3.5框架,除了最明显的一个我能想到的:

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

这是.NET 2。0解决方案,比Corey的复杂一点:http://stackoverflow.com/questions/18407#153037 – Joe 2008-09-30 13:38:51

回答

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

我通常使用CoreyNsolution简单的情况下,像那。任何更复杂的,使用LINQ查询。

-1

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

4 => 0000100
16 => 0010000
64 =>百万

使用一些二进制数学...

testList = 4 + 16 + 64 => 1010100
测试值= 16
testResult = testList & testValue

1

你可以用类似于.NET 2.0的方法,利用数组o f T实现IList <T>和IList <T>有一个Contains方法。因此,以下是相当于科里的.NET 3.5解决方案,但很明显不太清楚:

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

我经常使用的IList <Ť>为数组声明,或至少用于通过一维阵列参数。这意味着您可以使用IList属性(如Count),并轻松地从数组切换到列表。例如。

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