簡體   English   中英

不明白為什么我會收到 IndexOutOfRangeException

[英]Don't understand why I'm getting an IndexOutOfRangeException

我試圖將數據字段名稱從文本文件加載到我的程序中,並將它們存儲到一個變量中,一個數組。

字段名稱用於將其他文件中的數據排序並打印到有組織的新文檔中。

我在將文件中的字段存儲到數組中時遇到了很多麻煩。

數據字段文本文件以列表方式組織,每個字段都在自己的行上。

我創建了一個 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]);
    }
}

這是因為當你定義一個數組時,你必須為每個元素騰出空間。 因此,當您像所做的那樣聲明數組時,您並沒有給它任何空間來接受新數據。 您可能希望以下列方式聲明您的數組(以便它有足夠的空間容納所有數據):

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

您正在閱讀多達 151 個元素(因為您的<= 150條件),因此您需要提供適當的空間。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM