Пытаюсь добавить в список объекты класса, но выдает ошибку "выход за границы указанного диапазона"
Код выглядит как-то так: (отрывок именно с данной проблемой):
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 шт):
В данном случае List<Number> это generic, т.е. класс со своими методами, без инициализации он имеет нулевую длину. Напомню что [0] - это обращение к первому элементу, т.е. длина массива должна быть 1
Для того чтобы использовать [] нужно чтобы там уже были элементы:
var series = List<Number>{0, 1, 3.14}
Если бы объявление было таким то ошибки не было, элементы присутствуют. Но так как объявление без начальной инициализации то для добавления элемента следует писать так:
series.Add(new_integer);
Использованный конструктор создаёт список, задавая его вместимость:
var series = new List<Number>(count);
Указывая вместимость, вы задаёте начальный размер массива, в котором список "под капотом" хранит элементы. Настоящее количество элементов Count в списке НЕ одно и тоже, что его вместимость Capacity.
Когда вы создали список через этот конструктор, Count равняется 0. По-этому при обращении series[i] вы получаете ArgumentOutOfRangeException.
В вашем случае, достаточно заменить
series[i] = ...;
на
series.Add(...);