.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
相关产品推荐
相关产品推荐

