确定变量是不是等于值“列表”中的值的最简洁方法
Posted
技术标签:
【中文标题】确定变量是不是等于值“列表”中的值的最简洁方法【英文标题】:Most succinct way to determine if a variable equals a value from a 'list' of values确定变量是否等于值“列表”中的值的最简洁方法 【发布时间】:2010-09-06 07:31:24 【问题描述】:如果我在 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);
【问题讨论】:
这是一个 .NET 2.0 解决方案,比 Corey 的要复杂一点:***.com/questions/18407#153037 一个javascript示例***.com/questions/12116326 【参考方案1】: bool b = new int[] 3,7,12,5 .Contains(5);
【讨论】:
【参考方案2】:您可以使用 .NET 2.0 执行类似的操作,方法是利用 T 数组实现 IList
bool b = ((IList<int>)new int[] 3, 7, 12, 5 ).Contains(5);
我经常将 IList
private readonly IList<int> someIntegers = new int[] 1,2,3,4,5 ;
【讨论】:
【参考方案3】:对于这样的简单情况,我通常使用CoreyN 的solution。如果更复杂,请使用 LINQ 查询。
【讨论】:
【参考方案4】:由于您没有指定输入的数据类型,我假设您可以将输入划分为 2 -> 2、4、8、16 的幂...这将允许您使用位来确定您的测试值是否是输入中的位之一。
4 => 0000100 16 => 0010000 64 => 1000000
使用一些二进制数学......
testList = 4 + 16 + 64 => 1010100 测试值 = 16 testResult = testList & testValue
【讨论】:
以上是关于确定变量是不是等于值“列表”中的值的最简洁方法的主要内容,如果未能解决你的问题,请参考以下文章