以下是我的代码,我是c#和foreach循环的新手,因为据我所知,除非我错过了一些愚蠢的东西,否则不应该导致溢出?
int[] testCopyArray = new int[10] { 8, 4, 5, 1, 3, 6, 15, 7, 8, 11 };
int[] secondArray = new int[10];
Array.Copy(testCopyArray, secondArray, testCopyArray.Length);
Console.WriteLine("FirstArray Length: " + testCopyArray.Length + " Second Array Length: " + secondArray.Length);
foreach (int num in testCopyArray)
{
Console.WriteLine("First Array: " + testCopyArray[num-1] + " Second Array: " + secondArray[num-1]);
}
Console.ReadKey();
答案 0 :(得分:2)
你正在使用num作为一个计数器 - 这是实际的项目。
foreach (int num in testCopyArray)
{
Console.WriteLine("TestCopyArray Number: " + num);
}
对于你想要做的事,你需要一个索引。
答案 1 :(得分:0)
num不是数组的索引,而是值。一旦你达到15(索引6),它将超出界限。
答案 2 :(得分:0)
您的foreach (int num in testCopyArray)
外观将通过该数组的内容进行迭代。在表达式(num
)中使用testCopyArray[num-1]
时,最终取消引用元素testCopyArray[15-1]
,该元素超出范围并导致问题。
答案 3 :(得分:0)
当您访问testCopyArray[num-1]
(或secondArray[num-1]
)时,您正在访问索引为num-1
的数组中的元素。
您拥有的foreach
循环将遍历数组中的项目。因此num-1
的值为7, 3, 4, 0, 2, 5, 14, 6, 7, 10
。
因此,您正尝试访问testCopyArray[14]
。并且数组没有索引14
。
我认为你打算做的是循环遍历数组的有效索引,如下所示:
for (int i = 0; i < testCopyArray.Length; i++)
{
Console.WriteLine("First Array: " + testCopyArray[i] + " Second Array: " + secondArray[i]);
}
答案 4 :(得分:0)
你需要使用for循环而不是foreach循环:
for (int i = 0; i < testCopyArray.Length && i < secondArray.Length; i++)
{
Console.WriteLine("First Array: " + testCopyArray[i] + " Second Array: " + secondArray[i]);
}