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
相关产品推荐
相关产品推荐

