为什么我收到溢出错误?

时间:2016-01-19 01:18:28

标签: c#

以下是我的代码,我是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();

5 个答案:

答案 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]);
 }