You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 15:06:03