你们中的任何一个好人都能告诉我可能导致这个C#方法抛出IndexOutOfBounds异常的原因吗?非常感谢。
public bool PopulateStudents(string path) //decided to return bool if successful reading file.
{
theStudentList = new List<Student>(); //create instance..
string text = null;
FileInfo source = new FileInfo(@path);
bool success = true;
try
{
StreamReader r = source.OpenText();
text = r.ReadLine();
string[] splitText = new string[23];
Student currentStudent = new Student();
while (text != null)
{
splitText = text.Split(',');
currentStudent = new Student(splitText[0], splitText[1], splitText[2]);
for (int i = 0; i < 20; i += 2)
{
currentStudent.EnterGrade(int.Parse(splitText[i + 3]), int.Parse(splitText[i + 4]));
}
currentStudent.CalGrade();
theStudentList.Add(currentStudent);
text = r.ReadLine();
}
r.Close();
}
catch (Exception exc)
{
success = false;
Console.WriteLine(exc.Message);
}
return success;
}
示例输入文件:
0199911,Bill,Gates,27,30,56,60,0,30,83,100,57,60,0,30,59,60,0,30,59,60,88,100
0199912,Steve,Jobs,30,30,55,60,25,30,70,100,55,60,25,30,50,60,0,30,58,60,80,100
0199913,Marc,Andresen,30,30,55,60,25,30,70,100,55,60,25,30,50,60,0,30,58,60,80,100
0199914,Larry,Ellisen,30,30,55,60,25,30,70,100,55,60,25,30,50,60,0,30,58,60,80,100
编辑:你的所有答案都很棒,非常感谢,但事实证明我的文本文件末尾只有一些空白空格。我想指出,如果我要在最后保留空白区域,您提供的响应将解决此问题。 :)
答案 0 :(得分:0)
每当您阅读少于23个逗号的行时。最有可能的是,这最终是一条空行。
你应该做
if (splitText.Length<24)
{
WarnLogOrDoSomethingElse(text);
continue;
}
后立即
splitText = text.Split(',');
答案 1 :(得分:0)
问题在于,当您将text.Split(',')
的返回值分配给splitText
时,您将使用长度等于分割所产生的标记数的数组替换长度为23的数组。 text
。在访问特定项之前,您需要检查数组中现在有多少项,并且循环应该使用splitText.Length
作为上限。
答案 2 :(得分:0)
当你说:
splitText = text.Split(', ');
你进一步假设你的循环总是会得到23个元素我怀疑这可能并非总是如此。