如果可以添加超过该大小的元素,为什么我们要初始化数组的大小?
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 中的工作方式,当您创建一个数组时,您会在某处分配一部分内存,并且您的变量会引用该部分内存。当您为该变量分配一个新实例时,您会在其他地方创建一个新的内存部分,并且您的变量会引用对新内存的引用。
我是编程新手。所以我在某处读到我们应该用大小初始化数组,否则会抛出编译错误。所以在下面的代码中我已经初始化了大小为 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 中的工作方式,当您创建一个数组时,您会在某处分配一部分内存,并且您的变量会引用该部分内存。当您为该变量分配一个新实例时,您会在其他地方创建一个新的内存部分,并且您的变量会引用对新内存的引用。