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

如何解决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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 04:27:39