【问题标题】:Adding class inside another class在另一个类中添加类
【发布时间】:2014-07-23 06:10:37
【问题描述】:

我有这样的课:

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

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

【问题讨论】:

标签: c# list class generics


【解决方案1】:

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());

【讨论】:

    【解决方案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 { }
    

    【讨论】:

    • 非常感谢,这让我了解了结构
    • 这就是我们在这里的目的 :) 您现在可以按照您的想法实现它(例如在包含列表的类的构造函数中)。
    【解决方案3】:

    我相信Zones 没有初始化。

    【讨论】:

      【解决方案4】:

      你需要初始化 Levels 集合

      public List<arrayData2> Levels;
      

      您可以在 ArrayData 构造函数或 Start() 方法中执行此操作

      【讨论】:

        猜你喜欢
        • 2015-01-01
        • 2013-02-10
        • 2018-10-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-08-13
        • 2019-03-05
        相关资源
        最近更新 更多