C#中如何简洁判断变量是否属于List元素(无需长或表达式)
问题描述
我有一个名为Input的变量,它是输入框的值,同时我有一个包含大量字符串的List<string>集合:
List<string> names = new List<string>() { "Franz","Hans","Frank","Holger","Reiner".... };
我需要判断Input的值是否是该List中的某一个元素。常规写法会用很长的逻辑或表达式,例如:
if(Input=="Franz" || Input=="Hans" || Input=="Frank" ... ) // 成百个或条件.. { DoSomething(); }
有没有更简便的方法可以判断Input是否属于List元素,无需使用逻辑或表达式?
简便解决方案
直接用List<T>自带的Contains方法就能实现,代码简洁高效:
if(names.Contains(Input)) { DoSomething(); }
补充说明
- 默认情况下
Contains会使用区分大小写的字符串匹配逻辑。如果需要忽略大小写,可传入字符串比较参数:
if(names.Contains(Input, StringComparison.OrdinalIgnoreCase)) { DoSomething(); }
- 若列表数据量极大(上万条以上),追求更快的查询效率,可以把
List<string>转为HashSet<string>——HashSet的查找时间复杂度为O(1),远优于List的O(n):
HashSet<string> nameSet = new HashSet<string>(names); if(nameSet.Contains(Input)) { DoSomething(); }
同样,HashSet也支持忽略大小写的构造方式:
HashSet<string> nameSet = new HashSet<string>(names, StringComparer.OrdinalIgnoreCase);
内容的提问来源于stack exchange,提问作者Mdarende
相关产品推荐
相关产品推荐

