C# 错误:索引超出数组的界限 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; 尝试 { 对于(int x=0;x

C# 错误:索引超出数组的界限 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; 尝试 { 对于(int x=0;x,c#,arrays,indexoutofboundsexception,C#,Arrays,Indexoutofboundsexception,每当我在for循环中使用变量cnt来指定要停在哪一行时,我就会收到这个问题标题中列出的错误,但是每当我在循环中设置一个整数来代替cnt时,它就会完美地工作。应该是吗 string[] lines = System.IO.File.ReadAllLines(@"C:\Users\myname\Desktop\test.txt"); int cnt = lines.Count(); int arraynum1 = 0; int arraynum2

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

应该是吗

 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());
        }
而不是

    arraynum1 = arraynum1 + 1;
    arraynum2 = arraynum2 + 1;
    arraynum3 = arraynum3 + 1;
难道不是吗

 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());
        }
而不是

    arraynum1 = arraynum1 + 1;
    arraynum2 = arraynum2 + 1;
    arraynum3 = arraynum3 + 1;
试试这个:

    arraynum1 = arraynum3 + 1;
    arraynum2 = arraynum3 + 1;
    arraynum3 = arraynum3 + 1;
正如您目前在这三种情况下所指的相同阵列arraynum3

arraynum1 = arraynum1 + 1;
arraynum2 = arraynum2 + 1;
arraynum3 = arraynum3 + 1;
试试这个:

    arraynum1 = arraynum3 + 1;
    arraynum2 = arraynum3 + 1;
    arraynum3 = arraynum3 + 1;
正如您目前在这三种情况下所指的相同阵列arraynum3

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

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

迭代1(x=0):

迭代2(x=1):

迭代3(x=2):

迭代4(x=3):

迭代5(x=4):

迭代6(x=5): 永远也达不到

因此,不要将循环变量x增加1,而是将其增加3,如:

The exception you stated will be thrown here
mc[0] = lines[6]
mc[1] = lines[6]
mc[2] = lines[6]
for(int x=0;x+2

这种方法也会考虑文件不包含3行的可能性。

假设你的文件包含6行,这将是你的MC(0)…MC(2)在你的for循环中保持的值:

迭代1(x=0):

迭代2(x=1):

迭代3(x=2):

迭代4(x=3):

迭代5(x=4):

迭代6(x=5): 永远也达不到

因此,不要将循环变量x增加1,而是将其增加3,如:

The exception you stated will be thrown here
mc[0] = lines[6]
mc[1] = lines[6]
mc[2] = lines[6]
for(int x=0;x+2

这种方法也会考虑到你的文件不能包含不可分割的行数3的可能性。

这是可行的,但是我需要所有数组都比ARARYNUM3高一点,并且不断地进行和加起来,我从文本文件中获取字符串并将其存储在数组中,我就是这样做的。这会起作用,但我需要所有数组都比arraynum3高一个,并不断地进行遍历和累加,我从一个文本文件中获取字符串并将其存储在数组中,这就是我的工作方式。可能值得将
arraynumX
全部删除。它似乎只用于跟踪要使用的
索引,而您的解决方案不使用该索引。啊,在评论之前应该先刷新。:)@Blue先生:我的答案你说得对,我不知怎么错过了
我想有些人只是略读了一下这个问题,没有意识到OP试图在每次迭代中读3行。可能值得删除
arraynumX
。它似乎只用于跟踪要使用的
索引,而您的解决方案不使用该索引。啊,在评论之前应该先刷新。:)@Blue先生:我的答案你说得对,我不知怎么错过了
,我想有些人只是略过了这个问题,没有意识到OP试图在每次迭代中读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);

        }