不明白为什么我得到IndexOutOfRangeException

时间:2016-06-18 22:05:59

标签: c# arrays file-io

我正在尝试从文本文件中将数据字段名称加载到我的程序中,并将它们存储到变量数组中。

字段名称用于将其他文件中的数据排序并打印到有组织的新文档中。

我在将文件中的字段存储到数组中时遇到了很多麻烦。

数据字段文本文件以列表方式组织,每个字段都在其自己的行上。

我创建了一个while循环,直到StreamReader的Peek()等于-1。

我在while循环中嵌套了一个for循环,它将索引整数变量递增1,直到它小于或等于文本文件中的总行数。

它还使用ReadLine()将一行文本文档存储到特定索引处的数组中。我认为在for循环中使用它会循环遍历每一行并存储它需要存储的内容。

我需要使用字典中的字段,这样当我开始显示该信息时,我可以将字段用作键,将其他文档中的数据用作字典的值。

我认为我这样做的方式会有必要的措施来避免IndexOutOfRangeException,但我想情况并非如此。

我很感激有意愿帮助我的人。如果有任何不清楚的地方,我会道歉,如果需要,我会尽量澄清事情。

如果我尝试的逻辑解释很糟糕,那就是代码:

    class Program
{
    protected static string[] dataFields = new string[] { };

    static void Main(string[] args)
    {
        int iIndex;

        using (StreamReader titleStream = new StreamReader(@"..\..\DataFieldsLayout.txt"))
        {
            while (titleStream.Peek() > -1)
            {
                for (iIndex = 0; iIndex <= 150; iIndex++)
                {
                    // where the exception occurs
                    dataFields[iIndex] = titleStream.ReadLine();
                }
            }
        }

        // test
        Console.WriteLine(dataFields[0]);
        Console.WriteLine(dataFields[1]);
        Console.WriteLine(dataFields[2]);
        Console.WriteLine(dataFields[3]);
        Console.WriteLine(dataFields[4]);
    }
}

1 个答案:

答案 0 :(得分:0)

这是因为当你定义一个数组时,你必须为每个元素腾出空间。因此,当您按照自己的方式声明数组时,您没有给它任何空间来接受新数据。您可能希望以下列方式声明您的数组(以便它有足够的空间容纳所有数据):

protected static string[] dataFields = new string[151];

您正在阅读最多151个元素(因为您的<= 150条件),因此您希望提供适当的空间。