错误:索引超出了数组的界限

本文关键字:数组 界限 索引 错误 | 更新日期: 2023-09-27 17:59:23

 string[] lines = System.IO.File.ReadAllLines(@"C:'Users'myname'Desktop'test.txt");
        int cnt = lines.Count();
        int arraynum1 = 0;
        int arraynum2 = 1;
        int arraynum3 = 2;
        try
        {
            for (int x = 0; x < cnt; x++)
            {
                mc[0] = lines[arraynum1];
                mc[1] = lines[arraynum2];
                mc[2] = lines[arraynum3];
                arraynum1 = arraynum3 + 1;
                arraynum2 = arraynum3 + 1;
                arraynum3 = arraynum3 + 1;
                ListViewItem item = new ListViewItem(new[] { mc[0], mc[1], mc[2] });
                listView1.Items.Add(item);
            }
        }
        catch(Exception ex)
        {
            MessageBox.Show(ex.ToString());
        }

每当我在for loop中使用变量cnt来指定停止在哪一行时,我都会收到这个问题标题中列出的错误,但每当我在循环中设置integer来代替cnt时,它都能完美地工作。

错误:索引超出了数组的界限

不应该是吗

    arraynum1 = arraynum1 + 1;
    arraynum2 = arraynum2 + 1;
    arraynum3 = arraynum3 + 1;

而不是

    arraynum1 = arraynum3 + 1;
    arraynum2 = arraynum3 + 1;
    arraynum3 = arraynum3 + 1;

假设您的文件包含6行,这将是您的mc[0]的值。。mc[2]将保持在你的for循环中:

迭代1(x=0(:

mc[0] = lines[0]
mc[1] = lines[1]
mc[2] = lines[2]

迭代2(x=1(:

mc[0] = lines[3]
mc[1] = lines[3]
mc[2] = lines[3]

迭代3(x=2(:

mc[0] = lines[4]
mc[1] = lines[4]
mc[2] = lines[4]

迭代4(x=3(:

mc[0] = lines[5]
mc[1] = lines[5]
mc[2] = lines[5]

迭代5(x=4(:

The exception you stated will be thrown here
mc[0] = lines[6]
mc[1] = lines[6]
mc[2] = lines[6]

迭代次数6(x=5(:永远不会到达

因此,与其将循环var x增加1,不如将其增加3,如:

        for (int x = 0; x+2 < cnt ; x+=3)
        {
            mc[0] = lines[x];
            mc[1] = lines[x+1];
            mc[2] = lines[x+2];
            ListViewItem item = new ListViewItem(new[] { mc[0], mc[1], mc[2] });
            listView1.Items.Add(item);
        }

这种方法还将考虑文件中不包含不能除以3的行数的可能性。

试试这个:

arraynum1 = arraynum1 + 1;
arraynum2 = arraynum2 + 1;
arraynum3 = arraynum3 + 1;

因为您当前在所有三种情况下都引用相同的数组arraynum3。

arraynum1 = arraynum3 + 1;
arraynum2 = arraynum3 + 1;
arraynum3 = arraynum3 + 1;