繁体   English   中英

错误:索引超出数组范围

[英]Error : Index out of bounds of array

 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指定要在哪一行停止时,都会收到此问题标题中列出的错误,但是每当我在循环中设置一个代替cntinteger ,它就可以正常工作。

不是吗

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

代替

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

尝试这个:

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

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

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除的可能性。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM