如果我在 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);
有帮助吗?

解决方案

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

其他提示

您可以使用 .NET 2.0 执行类似的操作,方法是利用 T 数组实现 IList<T>,并且 IList<T> 具有 Contains 方法。因此,以下内容相当于 Corey 的 .NET 3.5 解决方案,但显然不太清楚:

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

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

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

我通常使用 科里·N解决方案 对于这样的简单情况。如果有更复杂的情况,请使用 LINQ 查询。

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

4 => 0000100
16 => 0010000
64 => 1000000

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

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top