如何处理Lambda查询返回的null值以规避空引用异常
Lambda查询空值安全处理方案
异常触发原因
你遇到的空引用异常并非Any方法无匹配元素导致:Any方法本身在集合无匹配项时只会返回false,不会抛出异常。触发异常的常见场景有三类:
users集合本身为null- 集合中存在值为
null的元素x - 元素的
userId属性为null,调用ToString()时触发空引用
空安全写法示例
基础适配写法(C# 6及以上版本支持)
使用空条件运算符?.处理所有可能为null的调用节点:
// 可空布尔类型需显式与true比对,避免隐式转换异常 if (users?.Any(x => x?.userId?.ToString() == id) == true) { var user = _users.First(x => x?.userId?.ToString() == id); _users.Remove(user); } // 补充user实体初始化逻辑后再执行Add操作 _users.Add(user);
优化写法(减少集合遍历次数)
无需分开执行Any和First两次遍历,直接用FirstOrDefault单次查询即可:
var targetUser = users?.FirstOrDefault(x => x?.userId?.ToString() == id); if (targetUser != null) { _users.Remove(targetUser); } // 完成user实体初始化逻辑 _users.Add(user);
注意事项
- 空条件运算符
?.在左侧值为null时会直接返回null,不会执行后续的成员调用,从根源避免空引用异常 - 你原代码中
_users.Add(user)的user变量如果仅在if块内定义,当if条件不成立时user未赋值,调用Add也会触发空引用异常,建议提前完成实体初始化逻辑
内容的提问来源于stack exchange,提问作者user16252006
相关产品推荐
相关产品推荐

