在我的C#程序中,我正在尝试将数据从文本文件读入数组。我在这里看了很多答案,无法弄清楚我的代码有什么问题。每当我运行它时,我得到一个异常,说我得到了一个未处理的类型'System.IndexOutOfRangeException'的异常,但我不明白为什么索引会超出范围。
这就是我所拥有的:
string[] namesArray = new string[] { };
using (var sr = new StreamReader(mydocpath + @"\nameIDLines.txt"))
{
for (int i = 1; i < numLines; i++)
{
nameIDLine = sr.ReadLine();
nameIDLine = nameIDLine.Split(new string[] { "ID" }, StringSplitOptions.None)[0];
namesArray[i] = nameIDLine;
}
}
答案 0 :(得分:4)
执行此操作时:
string[] namesArray = new string[] { };
您正在初始化长度为0的数组。因此,当您执行namesArray[i]
时,无论i
如何,它都将始终超出范围。
由于您知道行数以及项目数,因此您可以使用该数字初始化数组:
string[] namesArray = new string[numLines];
答案 1 :(得分:1)
正如@stybl指出的那样,问题是你正在初始化一个零长度数组来存储你的行......这将导致“索引超出范围”异常。最重要的是,我想知道如何在使用numLines
解析文件时获得一致的StreamReader
值...这是非常危险的,因为你必须确保文件总是包含足够的行。
我建议您改用以下方法:
String[] lines = File.ReadAllLines(mydocpath + @"\nameIDLines.txt");
如果要从文件中获取特定数量的行,可以按以下步骤操作:
String[] lines = File.ReadAllLines(mydocpath + @"\nameIDLines.txt").Take(numLines).ToArray();