Это трудно диагностировать, потому что вы предоставили ограниченную информацию. Если бы я мог увидеть файл, который вы запускаете через свою программу, и указать его как путь, я бы смог сравнить то, что функция пытается сделать, с данными, которые он пытается сделать. Тем не менее, это кажется мне знакомым, поэтому я попытаюсь решить его и, по крайней мере, дам вам инструмент, чтобы примерить его.
У меня возникла похожая проблема с программой, которая требовала чтения файла CSV для графической программы. Проблема заключалась в том, что при создании CSV-файла в конце оставалась пустая строка. Это оставило мне пустой массив для представления последней строки в файле.
Кроме того, вы убедились, что массивы, добавляемые в strArrayList, имеют одинаковый размер?
Если вы проверяете эту пустую строку в конце вашего файла, и она не существует, и если вы проверяете запятые, оставленные в конце строк в вашем файле, переданных как путь, тогда вы можете попробовать правки, которые я сделал выше чтобы понять, какие строки в вашем файле CSV вызывают проблему. Я прокомментировал все изменения, которые я сделал с помощью «РЕДАКТИРОВАТЬ:», чтобы их было легко найти. Без дополнительной информации я не смогу решить проблему, но, возможно, смогу помочь вам взглянуть в правильном направлении.
Ниже приведен отредактированный код с выводом номеров строк в вашем файле, которые связаны с ошибками. Удачи!
public bool PopulateStudents(string path)
{
theStudentList = new List<Student>();
bool flag = false;
// EDIT: NEW VARIABLE int lineCounter declared and initialized before try block so it remains in scope when the catch block is called
int counter = 0;
try
{
List<string[]> strArrayList = new List<string[]>();
using (StreamReader streamReader = new StreamReader(path))
{
string str;
while ((str = streamReader.ReadLine()) != null)
{
string[] strArray = str.Split(',');
strArrayList.Add(strArray);
}
}
for (int index1 = 0; index1 < strArrayList.Count; ++index1)
{
// EDIT: UPDATE lineCounter
++lineCounter;
string[] strArray = strArrayList[index1];
Student student = new Student(strArray[0], strArray[1], strArray[2]);
int index2 = 3;
while (index2 < strArray.Length)
{
student.EnterGrade(int.Parse(strArray[index2]), int.Parse(strArray[index2 + 1]));
index2 += 2;
}
student.CalGrade();
theStudentList.Add(student);
}
}
catch (Exception e)
{
flag = true;
Console.WriteLine(e);
// EDIT: PRINT CURRENT LINE
Console.WriteLine(“error at line in file = “ + lineCounter);
}
return flag;
}