c#数组越界

c# arrays out of bounds

        Random rnd = new Random();

        int[] numbeo = new int[100];

        for (int index = 0; index <= numbeo.GetLength(0) - 1; index++)
        {
            numbeo[index] = rng.Next(100);
            Console.WriteLine(numbeo[index]);
        }

我曾在一家名为 funtech 的公司工作过,他们用 are string 向我展示了如何在 C# 中创建数组,我非常理解它,但我唯一不明白的是什么时候需要 numbeo.GetLength - 1 为什么我需要减一。

我想是和这个有关 比方说我有一个随机数数组:

59、64、53、4、89。 0、1、2、3、4。

我在想,当您尝试使用 -1 时,它会将所有值向后移动,所以现在它会这样做。

59、64、53、4、89。 1、2、3、4、5。

我说得对吗

试试这个

    Random rnd = new Random();

    int[] numbeo = new int[100];

    for (int index = 0; index < numbeo.Length  ; index++)
    {
        numbeo[index] = rng.Next(100);
        Console.WriteLine(numbeo[index]);
    }

数组长度始终return取决于其大小,但索引值始终从零开始。

示例:如果您创建数组 int[] numbeo = new int[100],则长度函数将 return 长度为 100,并且数组没有 100 索引值,因为它从零开始。

Console.Write("length :"+numbeo.GetLength(0)); 

不,它与生成的值无关。 C# 中的数组是从零开始的,这意味着数组的第一个索引是 0。

string[] elements = new string[3]; // String array with 3 elements, indexes: 0, 1, 2
elements[0] = "Firt element"; // Ok
elements[1] = "Second element"; // Ok
elements[2] = "Third element"; // Ok
elements[3] = "Out of bounds"; //Throws an error

.GetLength(0) 方法说给我第一个维度的长度(0 是维度中的第一个)。在一维数组中,这与 .Length.

相同
Console.WriteLine(elements.GetLenght(0)); // Prints 3 to console
Console.WriteLine(elements.Length); // Prints 3 to console

所以你可以使用

numbeo.Length

-1 是因为 for 循环使用 less or equal 条件,在你的例子中。 for 循环从 0 到 100,因为你的 numbeo 数组的大小是 100。而且因为 100 是这个数组中的第一个无效索引,你必须减去 1,只到 99。 简而言之,这太复杂了,使用 < 而不是 <=,并使用 .Length 而不是 GetLength(0)

    for (int index = 0; index < numbeo.Length; index++)
    {
        numbeo[index] = rng.Next(100);
        Console.WriteLine(numbeo[index]);
    }

这个 forloop 从 0 到 99(包括两端),这是这个数组索引的确切有效范围。

这是因为数组的第一个索引为零。所以如果你的数组是空的,那么我们可以说它包含 0 个元素并且它的长度也是 0。 如果数组在 0 索引中有 1 个元素,则其长度为 1。如果数组有 2 个元素,则其长度为 2,依此类推。 然而,有些语言的数组索引从 1 而不是 0 开始(例如 Fortran、Matlab、Smalltalk),但这里我们谈论的是 c#。