我有一个这样的课程:
[System.Serializable]
public class arrayData
{
public List<arrayData2> Levels;
}
public List<arrayData> Zones;
[System.Serializable]
public class arrayData2 { }
我应该在Levels
集合中添加一个项目:
void Start()
{
Zones.Add(new arrayData());
Zones[0].Levels.Add(new arrayData2());
}
该方法在运行时不断发出此错误:
NullReferenceException:未将对象引用设置为的实例 对象
有人知道我错过了什么吗?
答案 0 :(得分:5)
在arrayData
中,您需要一个Levels
的实际实例,您可以在构造函数中创建该实例:
[System.Serializable]
public class arrayData
{
public List<arrayData2> Levels;
public arrayData()
{
Levels = new List<arrayData2>();
}
}
您必须在使用之前创建Zones
的新实例:
var Zones = new List<arrayData>();
Zones.Add(new arrayData());
Zones[0].Levels.Add(new arrayData2());
答案 1 :(得分:2)
在您的示例中,您缺少初始化Zones
和 Levels
个集合。
您可以在包含它们的类或Start
方法上执行此操作。
例如,在Start
方法:
void Start()
{
var Zones = new List<arrayData>();
Zones.Levels = new List<arrayData2>();
Zones.Add(new arrayData());
Zones[0].Levels.Add(new arrayData2());
}
或者在包含它们的类上:
[System.Serializable]
public class arrayData
{
public List<arrayData2> Levels = new List<arrayData2>();
}
public List<arrayData> Zones = new List<arrayData>();
[System.Serializable]
public class arrayData2 { }
答案 2 :(得分:0)
我认为Zones
未初始化。
答案 3 :(得分:0)
您需要初始化Levels集合
public List<arrayData2> Levels;
您可以在ArrayData构造函数或Start()方法
中执行此操作