空数组引发System.NullReferenceException异常问题排查
解决System.NullReferenceException异常问题
问题根源
你声明的List<Num>[] num数组仅分配了可容纳45个元素的存储空间,但数组内每个位置的默认值都是null——相当于你只造了装列表的空容器,容器里并没有真正的List<Num>实例。直接调用num[0].Add(...)时,本质是在调用一个null对象的方法,自然触发空引用异常。
至于IDE能识别num[5][3].StatG,是因为IDE做的是静态类型检查:它通过代码定义知道num是存储List<Num>的数组、List<Num>的元素是Num类型、Num包含StatG字段,但不会校验运行时该位置是否真的存在实例。
解决方案
1. 一次性初始化数组所有元素
创建数组后,通过循环为每个索引位置生成List<Num>实例:
// 先创建数组框架 List<Num>[] num = new List<Num>[45]; // 遍历数组,为每个位置初始化空列表 for (int i = 0; i < num.Length; i++) { num[i] = new List<Num>(); }
完成后再调用num[0].Add(new Num())即可正常执行。
2. 按需初始化单个元素
如果不需要一次性初始化全部45个列表,可在使用目标索引前先检查并初始化:
// 检查num[0]是否未实例化,是则创建新列表 if (num[0] == null) { num[0] = new List<Num>(); } // 现在可安全添加元素 num[0].Add(new Num());
内容的提问来源于stack exchange,提问作者Josh
相关产品推荐
相关产品推荐

