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

.NET 6可空性注解未识别数组索引检查问题咨询

.NET 6可空性注解无法识别数组索引检查的原因

这不是代码分析器的Bug,而是静态可空分析的设计限制,属于有意的错误报告。

原因解释

C#的可空分析是静态检查,它没办法做到以下两点:

  • 无法追踪数组索引i在if(list[i] != null)判断之后,是否被其他代码修改(比如循环内部不小心改变了i的值);
  • 无法保证数组在if判断和后续list[i]访问之间,没有被其他线程或外部代码修改(比如其他地方把list[i]重新赋值为null)。

出于安全性考虑,分析器会假设list[i]的状态可能在判断后发生变化,因此仍然提示“Possible NULL dereferencing”错误。

规避方法

正如你发现的,把数组元素赋值给局部变量即可解决问题:

public void Test()
{
    string?[] list = new string[10];
    list[0] = "A";

    for (int i = 0; i < list.Length; i++)
    {
        var item = list[i];
        if (item != null)
        {
            item.ToString(); // 无空引用提示
        }
    }
}

局部变量的状态是分析器可以完全追踪的,它能确定变量在if判断后不会被外部修改,因此不会再触发误报。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 01:42:39