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

KeyCollection作为IEnumerable时LINQ Contains方法行为不一致问题咨询

IEnumerable.Contains(null)的行为差异与解决方案疑问

问题现象

以下代码执行后会输出false:

IEnumerable<string> x = new List<string>();
Console.WriteLine(x.Contains(null));

但换成Dictionary的Keys集合作为IEnumerable<string>时,调用Contains(null)会直接抛出ArgumentNullException:

IEnumerable<string> x = new Dictionary<string, string>().Keys;
Console.WriteLine(x.Contains(null));

背景说明

我知道Dictionary.ContainsKey传入null时会抛出异常,推测Dictionary.KeyCollection的Contains方法行为就是源于此。但ContainsKey调用时会有编译警告(绿色波浪线),而通过IEnumerable接口调用时,编译阶段不会报错,只会导致程序运行时崩溃。

现有解决方案思路

由于调用代码无法提前知晓传入的IEnumerable的底层实现类型,我想到两种处理方案:

  • 完全避免对可空类型使用IEnumerable.Contains()方法;
  • 将KeyCollection这类特殊集合先转换为List,再以IEnumerable的方式处理。

想请教:这两种方案是否合理,有没有遗漏的其他关键要点?


内容的提问来源于stack exchange,提问作者chanban

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 20:02:20