获取“索引超出数组范围”。在 C# 中使用 foreach 循环时

Use*_*r05 -2 c# foreach indexoutofboundsexception

我在尝试使用 foreach 循环打印数组值时在运行时收到“System.IndexOutOfRangeException:'索引超出数组范围。'”错误。我在 Visual Studio 中调试了问题,可以看到 foreach 中的 i 将持续到超出范围的 7。foreach 循环会自动获取数组的所有元素,所以请帮助我理解错误的原因?下面是函数:

    void Sort(int[] A)
    {
        for (int i = 1; i < A.Length; i++)
        {
            int key = A[i];
            int j = i - 1;
            while (j >= 0 && A[j] > key)
            {

                A[j + 1] = A[j];
                j = j - 1;
            

            }
            A[j + 1] = key;
        }

        foreach (int i in A)
            Console.Write(A[i].ToString());

    }

}
Run Code Online (Sandbox Code Playgroud)

}

小智 5

我认为您误解了 foreach 循环的用法。改变-

foreach (int i in A)
    Console.Write(A[i].ToString());
Run Code Online (Sandbox Code Playgroud)

到-

foreach (int i in A)
    Console.Write(i.ToString());
Run Code Online (Sandbox Code Playgroud)

在上面的循环中i是一个元素,A而不是元素的索引。For 循环将为您提供索引:

for (int i = 0; i < A.Length; i++)
    Console.WriteLine(A[i].ToString());
Run Code Online (Sandbox Code Playgroud)

考虑这个例子来理解 for 循环和 foreach 循环的用法:

int[] test = { 9, 8, 7, 6, 5, 4 };

foreach (int i in test)
    Console.WriteLine(i);

Console.WriteLine();

for (int i = 0; i < test.Length; i++)
    Console.WriteLine(i);

Console.WriteLine();

for (int i = 0; i < test.Length; i++)
    Console.WriteLine(A[i]);

// Output:
// 9
// 8
// 7
// 6
// 5
// 4
//
// 0
// 1
// 2
// 3
// 4
// 5
//
// 9
// 8
// 7
// 6
// 5
// 4
Run Code Online (Sandbox Code Playgroud)

还要注意,.ToString()当你想打印一个整数时不需要。只是写Console.WriteLine(myInteger);