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

Unity C#向List添加对象时触发NullReferenceException求助

问题原因与解决方法

核心问题

你遇到的NullReferenceException是因为**builtTasks这个静态List只做了声明,没有进行实例化**。静态成员默认初始值为null,直接调用builtTasks.Add()时,相当于对一个空对象执行方法,必然触发空引用错误。

解决步骤

在进入循环构建newTask之前,先初始化builtTasks:

private void Start()
{
    if (builtTasks == null)
    {
        // 先实例化List,这一步是关键!
        builtTasks = new List<builtTask>();
        
        for (int i = 0; i < tasks.Length; i++)
        {
            // 原有的循环逻辑保持不变
            string championName = tasks[i].championName;
            string itemName;
            List<item> items1 = new List<item> {};

            for (int j = 0; j < tasks[i].itemBuild.Length; j++) 
            {
                itemName = tasks[i].itemBuild[j];
                for( int k = 0; k < items.Length; k++)
                {
                    if (itemName == items[k].itemName)
                    {
                        items1.Add(items[k]);
                        Debug.Log(items[k].itemName);
                    }
                }
            }
            
            builtTask newTask = new builtTask(championName, items1.ToArray());
            Debug.Log(newTask.championName);
            Debug.Log(newTask.itemBuild[0].itemName);
            Debug.Log(newTask.itemBuild[1].itemName);
            Debug.Log(newTask.itemBuild[2].itemName);

            builtTasks.Add(newTask);
        }
    }
}

额外提示

  • 同理,如果之后要使用runningTasks,也需要在使用前执行runningTasks = new List<builtTask>();进行实例化。
  • 静态List的生命周期是全局的,如果你希望场景切换后重置这个列表,需要额外处理清除逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.27 12:12:07