我创建了一个for循环,以从.txt文件中读取行,并希望将第一行分配给一个变量(名字),将第二行分配给另一个变量,其姓氏,将第三行分配给相应的薪水,然后是员工类型的第四行。尽管这对于一个人的信息很有用,但我很难使它适用于多名员工。当我使用i将名字变量分配给每第4行时,出现此错误:
System.ArgumentOutOfRangeException:'索引超出范围。必须为非负数并且小于集合的大小。 参数名称:index'
StreamReader sr = new StreamReader(openFileDialog1.FileName);
frmEmployee form = new frmEmployee();
EmployeeInfo employeeInfo = new EmployeeInfo(fname, lname, empPay, empType);
fileName = openFileDialog1.FileName;
string line;
while ((line = sr.ReadLine()) != null)
{
for (int i = 0; i < sr.ReadLine().Length; i++){
//Works for one employee, but not multiple
fname = File.ReadAllLines(fileName).ElementAt(0);
lname = File.ReadAllLines(fileName).ElementAt(1);
empPay = Double.Parse(File.ReadAllLines(fileName).ElementAt(2));
empType = File.ReadAllLines(fileName).ElementAt(3);
//Attempt to assign variables to multiple employees
//fname = File.ReadAllLines(fileName).ElementAt(0 + (4*i));
//lname = File.ReadAllLines(fileName).ElementAt(1 + (4*i));
//empPay = Double.Parse(File.ReadAllLines(fileName).ElementAt(2 + (4*i));
//empType = File.ReadAllLines(fileName).ElementAt(3 + (4*i));
}
答案 0 :(得分:1)
执行此操作的一种方法是使用for
循环,在该循环中,您从3
开始计数(由于数组是从零开始的,所以这是第四个索引),然后递增{{ 1}}。这样,您正在阅读4
行,然后跳到下一组。然后,您只需在4
行中创建新员工并将其添加到列表中即可。
例如:
4
答案 1 :(得分:0)
正如其他人所提到的,有两种相互冲突的方法用于读取文件的内容。 StreamReader.ReadLine()将读取下一行,并在该读取器中显示进度和内部指针。 File.ReadAllLines()一次将所有行读取到内存中的字符串数组中,您的代码可以轻松访问。
假设您的文件不是很大,我认为使用File.ReadAllLines将所有文件内容加载到数组中,然后逐步构建Employee对象集合可能是最简单的。
类似的事情可能会有所帮助:
mse(net, t2, y2)