使用 While 循环分配数组值会生成"Index outside the bounds of the array"



好吧,这是一个完全没有问题的问题。振作起来。

我正试图使用While循环为数组赋值,但我得到了一个超出数组边界的Index错误消息。以下是它的样子:

int [] Counter = new int [46];
xCount = 0;
while (xCount != 47)
{
Counter[xCount] = (xCount * 10000);
xCount++;   
}

我应该使用不同的C#代码来设置数组中的值吗?提前感谢您的任何答案/见解!

var Counter = Enumerable.Range(0,47).Select(x=>x*10000).ToArray();

应该为您提供一个由47个元素组成的数组。它使用LINQEnumerable.RangeSelectToArray方法。

但是,停下来问问自己,数组是否是最好的使用方法(无论你想解决什么问题(。有一些现代集合类比数组更适合大多数问题。一般来说,除非您自己编写集合类或需要与旧代码进行互操作,否则我建议您避开数组。

此外,请注意,上面的代码是声明性的。我说我想要什么,而不必担心如何完成的细节。在幕后,可能是使用循环或其他机制来生成该范围;但我真的不在乎这个,我只想从这个范围开始,应用一个转换(通过select(,然后强制它进入一个数组。我也不在乎它在中间阶段使用什么来存储该范围/计算。

仍然有一些地方适合循环,但写一个while循环并递增计数器有点奇怪。在数组上迭代的标准习惯用法是for循环:

for(int i=0;i<Counter.Length;i++)
{
Counter[i] = i*10000;
}

还要注意我是如何使用数组的长度而不是硬编码一个数字的。这样可以确保我们不会偏离数组的末尾代码中的错误实际上与此有关。当您编写new int [46]时,您正在创建一个包含46个元素的数组。这意味着该数组的有效索引为0-45。您的循环尝试使用索引46,正如异常所抱怨的那样,它超出了数组的界限。

简单回答:C#中的索引从0开始,因此元素的数量将始终比数组的最后一个索引大1!I.e:您有两个元素,索引:0和1。

您的情况是:您用46个元素初始化了数组,然后索引在0-45的范围内。

相关内容

最新更新