Добавление класса внутри другого класса

Вопрос:

У меня такой класс:

[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: ссылка на объект не установлена в экземпляр объекта

Кто-нибудь знает, что мне не хватает?

Лучший ответ:

В ваших примерах вам не хватает инициализации коллекций 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 { }

Ответ №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 не инициализируются.

Ответ №3

Вам необходимо инициализировать коллекцию Levels

public List<arrayData2> Levels;

Вы можете сделать это в конструкторе ArrayData или в методе Start()

Оцените статью
TechArks.Ru
Добавить комментарий