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

.NET 8中如何处理LINQ Where子句里预期的可空属性?

解决LINQ查询中CS8602空引用警告的方法

方案1:显式添加非空判断

通过先检查Name不为空,再执行比较操作,让编译器明确空值分支已被处理:

Person? person = _persons.Where(person => person.Name is not null && person.Name == "someName").FirstOrDefault();

方案2:使用模式匹配简化逻辑

利用C#模式匹配特性,is "someName"会自动隐含非空检查,语法更简洁:

Person? person = _persons.Where(person => person.Name is "someName").FirstOrDefault();

方案3:空值合并运算符兜底

将空的Name替换为空字符串后再比较,避免空引用风险:

Person? person = _persons.Where(person => (person.Name ?? "") == "someName").FirstOrDefault();

方案4:空宽恕运算符(谨慎使用)

如果能完全确认业务场景中不会因空值引发问题,可使用!告诉编译器忽略警告(仅建议在明确无风险时使用):

Person? person = _persons.Where(person => person.Name! == "someName").FirstOrDefault();

简化写法:直接使用FirstOrDefault重载

可以省略Where,直接在FirstOrDefault中传入谓词,结合上述任意一种判断逻辑:

Person? person = _persons.FirstOrDefault(person => person.Name is "someName");

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.20 19:37:02