2015-11-20 146 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。 –