2015-11-20 196 views
0

這是我的代碼,它從文本文件中讀取並將其放置在窗體上的列表框中。如果文本文件中已經有東西可以使用。但是,如果我刪除了文本文件中的內容並運行程序,它會崩潰並給我提供錯誤「索引超出了數組範圍」。從文本文件中讀取錯誤

assignment.Request.Name = columns[1];我不知道爲什麼/如何去解決它。

public static List<Assignment> GetAssignment() 
    { 
     if (!Directory.Exists(dir)) 
      Directory.CreateDirectory(dir); 


     StreamReader textIn = 
      new StreamReader(
       new FileStream(path3, FileMode.OpenOrCreate, FileAccess.Read)); 

     List<Assignment> assignments = new List<Assignment>(); 

     while (textIn.Peek() != -1) 
     { 
      string row = textIn.ReadLine(); 
      string[] columns = row.Split('|'); 
      Assignment assignment = new Assignment(); 

      assignment.Employee.Name = columns[0]; 
      assignment.Request.Name = columns[1]; 
      assignments.Add(assignment); 
     } 

     textIn.Close(); 

     return assignments; 
    } 

回答

1

你需要確保有柱陣列中至少2項,否則它會嘗試訪問數組項不存在:

while (textIn.Peek() != -1) 
     { 
      string row = textIn.ReadLine(); 
      string[] columns = row.Split('|'); 
      if(columns.length>=2) 
      { 
      Assignment assignment = new Assignment(); 

      assignment.Employee.Name = columns[0]; 
      assignment.Request.Name = columns[1]; 
      assignments.Add(assignment); 
      } 
     } 
1

把條件讀完文件後。

if(columns.length >2) 
{ 

assignment.Employee.Name = columns[0]; 
      assignment.Request.Name = columns[1]; 
      assignments.Add(assignment); 

} 
+0

這是行不通的。如果列長度爲1,那麼您仍然會嘗試訪問不在數組範圍內的列[1]。 –

+0

檢查colomn長度大於2 – Hiba

+0

我想也把它創造條件內的分配實例行。如果從未使用過,則創建該對象會浪費內存。這將是大於或等於2,不大於2。 –