如果可以添加超过该大小的元素,为什么我们要初始化数组的大小?

Why do we initialize the size of an array, if it is possible to add elements more than the size?

我是编程新手。所以我在某处读到我们应该用大小初始化数组,否则会抛出编译错误。所以在下面的代码中我已经初始化了大小为 3 的数组,这意味着数组中只能存储 3 个元素,对吧?从 0 到 2。但是当我 运行 代码时,我错误地给出了由 space 分隔的 4 位数字作为输入。我预计会出现索引超出范围的异常,但令我惊讶的是没有错误,当我尝试将数组的数字打印到控制台时,所有 4 位数字都被打印出来了。怎么可能?

int[] arr = new int[3];
            arr = Console.ReadLine().Split(' ').Select(x => int.Parse(x)).ToArray();

我什至想知道是否有与上面相同的使用 LINQ 读取多维数组的方法。

提前致谢!!!

因为 ToArray 方法将列表中的元素复制到新数组。

你已经分配了另一个单独的内存块,原来的数组 3 超出了范围

Enumerable.ToArray(IEnumerable) Method

Creates an array from a IEnumerable<T>.

这样做是一样的

var arr = new int[3]; // allocate
arr = new int[4]; // allocate again to same variable, which points to new memory

原始分配超出范围

这就是引用在 .net 中的工作方式,当您创建一个数组时,您会在某处分配一部分内存,并且您的变量会引用该部分内存。当您为该变量分配一个新实例时,您会在其他地方创建一个新的内存部分,并且您的变量会引用对新内存的引用。