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

使用单例模式添加任务实例到数组时抛出NullReferenceException异常排查

相关实现代码

public class IntroductionQuest : Quest
{
    //SINGLTON REALIZATION
    protected static IntroductionQuest instance;
    private IntroductionQuest(string Name) { name = Name; }
    public static IntroductionQuest Initialize(string Name)
    {
        if (instance == null)
        {
            instance = new IntroductionQuest(Name);
            PublicData.Quests.Add(instance);
        }
        return instance;
    }
    //SINGLETON REALIZATION
}
触发NullReferenceException异常的可能原因
  • PublicData.Quests未完成初始化:这是最常见的触发原因。如果你仅声明了该字段(例如public static List<Quest> Quests;),但没有给它赋值为实例化的集合对象(例如public static List<Quest> Quests = new List<Quest>();),调用Add方法时就会直接抛出空引用异常。如果Quests是数组类型,未实例化时访问成员也会触发相同问题。
  • PublicData类本身未实例化:如果PublicData不是静态类,你访问它的Quests成员前没有创建PublicData的实例,访问Quests时就会抛出空引用。
  • 多线程并发调用Initialize方法:当前的单例实现没有加锁,若多个线程同时判断instance == null进入实例化分支,极端情况下会出现执行Add操作时instance还未完成构造赋值的问题。
  • 基类Quest的构造逻辑存在空引用:子类的私有构造函数没有显式调用基类的有参构造,会默认调用基类的无参构造,如果基类无参构造中存在访问空对象的逻辑,会导致IntroductionQuest实例化失败,触发异常。
  • name字段的赋值逻辑异常:如果基类Quest中的name属性自定义了setter逻辑,内部存在访问空对象的操作,赋值时也会抛出空引用,尤其是传入的Name参数为null触发特殊分支的场景。

内容的提问来源于stack exchange,提问作者Алексей

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 21:57:03