Dheerajs975 Ответов: 2

Я получил ошибку {"индекс был вне диапазона. Должно быть неотрицательным и меньше размера коллекции.\r\nparameter name: индекс"}


if (e2 != null)
                {
                    if (dt != aaa[0].Date && e2[0].BranchId != aaa[0].BranchId && e2[0].StandardId != aaa[0].StandardId && e2[0].MediumId != aaa[0].MediumId)
                    {
                        List<attendencedata> ddd = new List<attendencedata>();
                        foreach (var y in e2)
                        {
                            ddd.Add(new AttendenceData()
                            {
                                Date = dt,
                                YearId = y.YearId,
                                StudentId = y.StudentId,
                                BranchId = y.BranchId,
                                StandardId = y.StandardId,
                                BoardId = y.BoardId,
                                MediumId = y.MediumId,
                                SubjectId = y.SubjectId,
                                Present = y.Present,
                                EnteryDate = System.DateTime.Now,
                            });

                        }


Что я уже пробовал:

может ли кто-нибудь сказать мне, что не так с условием if, которое я написал,

if (dt != aaa[0].Date && e2[0].BranchId != aaa[0].BranchId && e2[0].StandardId != aaa[0].StandardId && e2[0].MediumId != aaa[0].MediumId)


Я получаю ошибку в приведенном выше условии if

Richard MacCutchan

Ни ААА, ни Е2 не содержат никаких элементов. Используйте свой отладчик, чтобы выяснить, почему.

Jochen Arndt

aaa и/или e2-это пустая коллекция. Это означает, что они существуют (не являются нулевыми), но не имеют элементов (размер/количество равно нулю).

2 Ответов

Рейтинг:
1

OriginalGriff

Компиляция не означает, что ваш код верен! :смеяться:
Подумайте о процессе разработки как о написании электронного письма: успешная компиляция означает, что вы написали письмо на правильном языке - например, на английском, а не на немецком, - а не то, что письмо содержало сообщение, которое вы хотели отправить.

Итак, теперь вы входите во вторую стадию разработки (на самом деле это четвертая или пятая, но вы перейдете к более ранним стадиям позже): тестирование и отладка.

Начните с рассмотрения того, что он делает, и как это отличается от того, что вы хотели. Это важно, потому что это дает вам информацию о том, почему он это делает. Например, если программа предназначена для того, чтобы позволить пользователю ввести число, а затем удвоить его и напечатать ответ, то если бы ввод / вывод был таким:

Input   Expected output    Actual output
  1            2                 1
  2            4                 4
  3            6                 9
  4            8                16
Тогда совершенно очевидно, что проблема заключается в бите, который удваивает его - он не прибавляет себя к себе или умножает его на 2, он умножает его на себя и возвращает квадрат входного сигнала.
Таким образом, вы можете посмотреть на код, и очевидно, что он находится где-то здесь:
private int Double(int value)
   {
   return value * value;
   }

Как только у вас появится идея, что может пойти не так, начните использовать отладчик, чтобы выяснить, почему. Поместите точку останова в первую строку метода и запустите приложение. Когда он достигнет точки останова, отладчик остановится и передаст управление вам. Теперь вы можете запускать свой код построчно (так называемый "одноступенчатый") и просматривать (или даже изменять) содержимое переменных по мере необходимости (черт возьми, вы даже можете изменить код и повторить попытку, если вам это нужно).
Посмотрите на эти две коллекции aaa и e2 используйте отладчик, и он покажет вам все свойства для них, включая счетчик, и один или оба из них будут иметь счетчик ноль, указывающий на то, что коллекция пуста. Почему он пуст? Я не знаю, у меня нет этого кода, и у меня нет ваших данных. Поэтому начните просматривать свой код, чтобы выяснить, почему они не содержат элементов!

Подумайте о том, что должна делать каждая строка кода перед ее выполнением, и сравните это с тем, что она действительно делала, когда вы использовали кнопку "Step over" для выполнения каждой строки по очереди. Он сделал то, что вы ожидали? Если да, то переходите к следующей строке.
Если нет, то почему? Чем это отличается?
Надеюсь, это поможет вам определить, в какой части этого кода есть проблема и в чем она заключается.
Это навык, и его стоит развивать, поскольку он помогает вам как в реальном мире, так и в развитии. И, как и все навыки, он только улучшается при использовании!


Рейтинг:
1

Maciej Los

Вам нужно проверить, есть ли количество aaa и e2 больше нуля.

Взгляните на приведенный ниже пример:

int[] myData = {};
var item = myData[0]; //IndexOutOfRange exception is thrown, because myData is "empty" collection
Console.WriteLine("{0}", item);


Для получения более подробной информации, пожалуйста, смотрите: Устранение Неполадок Исключения: Система.исключение indexoutofrangeexception[^]