2013-05-21 45 views
0

你們中的任何一個人都可以告訴我什麼可能導致此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 

編輯:您所有的答案都是偉大的,大加讚賞,但事實證明我只是有一些空的空白,在我的文本文件的末尾。我想指出,如果我在最後保留空格,那麼您提供的回覆將解決此問題。 :)

+2

你能提供一個樣本輸入文件嗎? –

+1

請顯示哪一行拋出異常。 –

回答

0

每當你閱讀少於23個逗號的行。最有可能這是最後一條空白的路線。

你應該做

if (splitText.Length<24) 
{ 
    WarnLogOrDoSomethingElse(text); 
    continue; 
} 

後立即

splitText = text.Split(','); 
0

的問題是,當你的text.Split(',')返回分配給splitText您正在使用具有的陣列更換您的長度23的陣列長度等於分割text產生的令牌數量。在訪問特定項目之前,您需要檢查數組中現在有多少項目,並且循環應該使用splitText.Length作爲上限。

0

那麼當你說:

splitText = text.Split(', '); 

您還假定了你的循環,你總是會得到23元,我懷疑這可能並非總是如此。