将项目从文本文件添加到数组

时间:2018-04-03 18:18:12

标签: c# arrays

在我的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;
    }
}

2 个答案:

答案 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();