最简洁的方法来确定变量是否等于“列表”值的值

时间:2008-08-20 17:37:17

标签: c# logic boolean-logic

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

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

我知道我可以这样做:

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

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

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

显然上面的内容不起作用,但是我有兴趣看看是否有比我的第一个例子更简洁的东西,它必须为每个测试值一遍又一遍地重复相同的变量。

更新
我决定接受CoreyN的答案,因为这似乎是最简单的方法。我认为这很实用,对于新手来说仍然很简单。

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

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

4 个答案:

答案 0 :(得分:16)

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

答案 1 :(得分:1)

通过利用T的数组实现IList&lt; T&gt;和IList&lt; T&gt;的事实,你可以用.NET 2.0做类似的事情。有一个Contains方法。因此,以下内容相当于Corey的.NET 3.5解决方案,但显然不太明确:

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

我经常使用IList&lt; T&gt;用于数组声明,或至少用于传递一维数组参数。这意味着您可以使用IList属性(如Count),并轻松地从数组切换到列表。 E.g。

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

答案 2 :(得分:0)

我通常会使用CoreyNsolution来处理类似的简单案例。更复杂的是,使用LINQ查询。

答案 3 :(得分:-1)

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

4 =&gt; 0000100
16 =&gt; 0010000
64 =&gt;百万

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

testList = 4 + 16 + 64 =&gt; 1010100个
testValue = 16
testResult = testList&amp;测试值