如何解决Sonar Cube提示的“至少一条执行路径上为null”问题?
解决SonarCube提示的空引用问题
你的代码问题在于:numlist.Any()仅判断集合本身非空,但完全不保证FirstOrDefault(c => c.Number == request.Number)能找到匹配的元素——只要没有符合条件的项,这个方法就会返回null,直接访问.ValCount自然会触发空引用风险。给集合加可空标记只是声明集合本身可能为null,根本没解决“找不到匹配元素导致返回null”的问题。
直接给你几个可行的解决办法:
方法一:先查找再判空(最稳妥)
先把查找结果存到变量里,判断不为null后再赋值,同时可以去掉多余的numlist.Any()判断:
var targetItem = numlist.FirstOrDefault(c => c.Number == request.Number); if (targetItem != null) { targetItem.ValCount = request.Count; }
方法二:使用空条件运算符(C# 6+支持)
用?.运算符,当目标元素为null时,后续的赋值操作会直接跳过,不会触发空引用:
numlist.FirstOrDefault(c => c.Number == request.Number)?.ValCount = request.Count;
注意:如果ValCount是值类型(比如int),这种写法在某些场景下可能需要结合空合并运算符,但一般引用类型的属性直接这么写就没问题。
方法三:确保存在匹配项时用First()(谨慎使用)
如果你能通过业务逻辑确保一定有符合条件的元素,可以用First()代替FirstOrDefault(),但如果实际没有匹配项,会直接抛出InvalidOperationException,所以只适合确定存在的场景:
// 先判断是否存在匹配项 if (numlist.Any(c => c.Number == request.Number)) { numlist.First(c => c.Number == request.Number).ValCount = request.Count; }
这种方式会遍历两次集合,性能不如方法一,所以优先选方法一。
内容的提问来源于stack exchange,提问作者Earth
相关产品推荐
相关产品推荐

