好的,这是一个完全菜鸟问题。振作起来。
我正在尝试使用While循环将值分配给数组,并且我在数组错误消息的范围之外获取了Index。看起来是这样的:
int [] Counter = new int [46];
xCount = 0;
while (xCount != 47)
{
Counter[xCount] = (xCount * 10000);
xCount++;
}
我应该使用不同的C#代码在数组中设置值吗? 预先感谢您的任何答案/见解!
答案 0 :(得分:3)
var Counter = Enumerable.Range(0,47).Select(x=>x*10000).ToArray();
应为您提供47个元素的数组。它使用LINQ Enumerable.Range
,Select
和ToArray
方法。
但是,停下来,问问自己数组是否最适合使用(对于您要解决的任何问题)。现代的collection classes比数组更适合大多数问题。通常,除非您自己编写一个收集类或需要与较早的代码进行互操作,否则建议不要使用数组。
另外,请注意,上面的代码是 declarative 。我说的是我想要的,而不必担心如何完成的细节。在后台,可能是使用循环或其他某种机制来生成该范围。但我并不在乎,我只想从该范围开始,应用转换(通过select),然后将其强制为数组。我也不关心在中间阶段存储范围/计算的用途。
仍然存在适合使用循环的地方-但是编写while
循环并递增计数器有点奇怪。遍历数组的标准习惯用法是for
循环:
for(int i=0;i<Counter.Length;i++)
{
Counter[i] = i*10000;
}
还要注意我如何使用数组的长度而不是硬编码一个数字。这样可以确保我们不会离开数组的末尾。 您的代码中的错误实际上与此有关。当您编写new int [46]
时,您正在创建一个包含46个元素的数组。这意味着该数组的有效索引为0-45。您的循环尝试使用index 46,这是一个异常,它超出了数组的范围。
答案 1 :(得分:1)
简短的回答:C#中的索引从0开始,因此元素的数量将比数组的最后一个索引总是大1。!即:您有2个元素,索引分别为0和1。
您的情况:您使用46个元素初始化了数组,那么索引的范围是0-45。