0

ребят. Мне нужно создать массив класса LaneData, в котором уже вложен массив CarData. Пока что я попытался решить проблему, задав массив car (см ниже), что конечно очень криво и размер массива 99999 задан весьма неверно.

public class LaneData
{
    public int amount = 0;
    public int overall = 0;
    public class CarData 
    {
        public int speed;
        public int pos;
        public int time = 0;
    }
    public CarData[] car = new CarData[99999];
}

в самом методе я задаю массив класса LaneData следующим образом

    Program.LaneData[] lane = new LaneData[lanes]; 
    for (int i = 0; i < lanes; i++)
        lane[i] = new LaneData();

в общем-то, массив класса LaneData создается, однако ни о каком вызове вложенного массива car[] не идет и речи. Вот отрывок из кода, где я вызываю элемент массива car[]:

         for (int l = 0; l < lanes; l ++)
        {
            if (toAppear)
            {
                lane[l].amount ++;
                lane[l].overall ++;
                lane[l].car[lane[l].overall].speed = maxSpeed;
                lane[l].car[lane[l].overall].pos = roadLength;

            }
        }

Собственно, на строке

  lane[l].car[lane[l].overall].speed = maxSpeed;

выдается ошибка

[System.NullReferenceException: Object reference not set to an instance of an object.]

хотя lane[l].overall не выходит за рамки заданного мной размера в 99999 (вообще на момент ошибки это число равно 1).

Помогите, пожалуйста, задать массив класса CarData в массиве класса LaneData, а также сделать размер этого массива адекватным (в идеале должен зависеть от числа, задаваемого пользователем или вообще расширяться по мере необходимости в коде), а не непонятный 99999. Спасибо всем за помощь!

harald
  • 35
  • NullReferenceException это не про выход за пределы массива, это про то, что у вас lane[l].car[lane[l].overall] == null – Андрей NOP Oct 05 '18 at 08:20
  • Подсказка: public CarData[] car = new CarData[99999]; создает массив из 99999 nullов – Андрей NOP Oct 05 '18 at 08:20
  • Вообще, в c# есть и другие типы, кроме массива, вы бы почитали буквари для начала - про коллекции. – A K Oct 05 '18 at 08:20
  • Ищите в указанном дубликате подзаголовок "Элементы массива" – Андрей NOP Oct 05 '18 at 08:22
  • спасибо, я понял, где ошибка. касаемо других типов: я пытался сделать через List<>, но там вообще не было его возможно создать с привязкой списка car к определенному элементу массива lane[] (то есть список вообще как-то сам по себе существовал). не отрицаю, что я, что-то неправильно делал, но идея в том, что мне вообще не принципиально чтоб элементы CarData были массивом, главное чтоб их было много и они "принадлежали" lane'ам. спасибо большое за ответы и помощь! – harald Oct 05 '18 at 08:27
  • public List<int,CarData> car = new List<int,CarData>(); и не надо никаких лишних телодвижений :) – NewView Oct 05 '18 at 09:04

0 Answers0