Пытаюсь добавить в список объекты класса, но выдает ошибку "выход за границы указанного диапазона"

Код выглядит как-то так: (отрывок именно с данной проблемой):

        Console.Write("\nДля задания класса Series (набор), вводите количество вносимых в него объектов классов Integer/Double: ");
        int count = int.Parse(Console.ReadLine());
        var series = new List<Number>(count); 

//Number - основной. класс, имеющий два дочерних: Integer и Real

        Console.WriteLine("Вводите значения объектов через Enter, потом введите stop: ");
        for (int i = 0; i < count; i++)
        {
            string get_input = Console.ReadLine();
            if (get_input == "stop")
            {
                break;
            }
            if (int.TryParse(get_input, out int_value))
            {
                Integer new_integer = new Integer();
                new_integer.value = int_value;
                series[i] = new_integer;

//Series - массив, куда будут закидываться объекты классов Integer и Real

            }
            else if (double.TryParse(get_input, out double_value))
            {
                Real new_real = new Real();
                new_real.value = double_value;
                series[i] = new_real;
            }
            else
            {
                Console.WriteLine("Ведено неверное значение.");
            }

Я новичок в С#, ничего не понимаю, заранее извиняюсь за глупые ошибки


Ответы (2 шт):

Автор решения: Daniil Loban

В данном случае List<Number> это generic, т.е. класс со своими методами, без инициализации он имеет нулевую длину. Напомню что [0] - это обращение к первому элементу, т.е. длина массива должна быть 1 Для того чтобы использовать [] нужно чтобы там уже были элементы:

var series = List<Number>{0, 1, 3.14}

Если бы объявление было таким то ошибки не было, элементы присутствуют. Но так как объявление без начальной инициализации то для добавления элемента следует писать так:

series.Add(new_integer);
→ Ссылка
Автор решения: iiKuzmychov

Использованный конструктор создаёт список, задавая его вместимость:

var series = new List<Number>(count);

Указывая вместимость, вы задаёте начальный размер массива, в котором список "под капотом" хранит элементы. Настоящее количество элементов Count в списке НЕ одно и тоже, что его вместимость Capacity.

Когда вы создали список через этот конструктор, Count равняется 0. По-этому при обращении series[i] вы получаете ArgumentOutOfRangeException.

В вашем случае, достаточно заменить

series[i] = ...;

на

series.Add(...);
→ Ссылка