为什么这会导致“索引超出范围”异常
本文关键字:范围 异常 索引 为什么 | 更新日期: 2023-09-27 18:21:07
public void button2_Click(object sender, EventArgs e)
{
char[] delimiters = { ',', ''r', ''n', ' ' };
string[] content = File.ReadAllText(CSV_File).Split(delimiters);
int bounds = (content.GetUpperBound(0)); //bounds of this content string is 96
int i = 1;
id = new string[(bounds / 4)]; //for example index size = 96 / 4 = 24
for (i = 0; i <= (bounds / 4); i++)
{
int rows = (i * 4); // gets every 4th value
id[i] = content[rows]; //inserts row 96 into id 24 - fails here
}
}
坚持了一段时间了。确切的错误是"索引超出数组的范围"。但是,我不知道这指的是哪个索引。
将 for 循环中的<=
更改为<
。
看起来你不小心写了 <= 而不是<。请记住,数组索引的长度为 - 1。
我可能会建议稍微清理一下代码。这是很多额外的括号和变量...
var delimeters = new[] { ',', ''r', ''n', ' ' };
var content = File.ReadAllText(CSV_File).Split(delimeters);
id = content.Where((n, i) => i % 4 == 0).ToArray();
这取决于您实际正在读取的文件的内容。代码似乎很好。
为了获得最佳编码实践,最好检查 for 循环中的id.Length
,而不是检查bounds / 4
。
话虽如此,我相信您应该在 for 循环中的条件语句中使用<
而不是<=
。
我相信
在最后一次迭代中你会得到异常,因为在最后一次迭代中,你正在访问索引(bounds / 4)
,但索引的有效范围0
到(bounds / 4 ) - 1
。基本上,您将通过数组id
的末尾。您需要在循环条件中将<=
更改为<
。