在另一个类中添加类

时间:2014-07-23 06:10:38

标签: c# list class generics

我有一个这样的课程:

[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:未将对象引用设置为的实例   对象

有人知道我错过了什么吗?

4 个答案:

答案 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()方法

中执行此操作