错误:索引超出了数组的界限
本文关键字:数组 界限 索引 错误 | 更新日期: 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;