C#使用LINQ Any()方法对比两个字符串列表返回false原因问询
问题原因
- 你代码中
setB.Select(y => y)的返回值是IEnumerable<string>类型的集合对象,并非集合内的单个字符串元素 x.Equals()实际是在对string类型的元素和集合对象做相等性比较,二者类型不匹配,比较结果永远为false,因此最终返回值不符合预期
正确实现方案
方案1:直接判断元素是否存在
通过Contains方法判断setA的当前元素是否在setB中,代码最简单:
bool compare = setA.Any(x => setB.Contains(x));
方案2:交集判断
如果两个集合的元素量较大,优先用交集判断,性能更好:
bool compare = setA.Intersect(setB).Any();
方案3:预转HashSet优化
如果setB元素量很大,可以先转为HashSet降低查找时间复杂度:
HashSet<string> bHash = new HashSet<string>(setB); bool compare = setA.Any(x => bHash.Contains(x));
内容的提问来源于stack exchange,提问作者Slide
相关产品推荐
相关产品推荐

