我悄悄地开始编程。所以我在某处读到我们应该用大小初始化数组,否则会抛出编译错误。所以在下面的代码中,我初始化了大小为 3 的数组,这意味着数组中只能存储 3 个元素,对吧?从 0 到 2 开始。但是当我运行代码并错误地给出了 4 位空格分隔的数字作为输入时。我预计会出现索引越界异常,但令我惊讶的是没有错误,当我尝试将数组的数字打印到控制台中时,所有 4 位数字都被打印出来了。怎么可能?
int[] arr = new int[3];
arr = Console.ReadLine().Split(' ').Select(x => int.Parse(x)).ToArray();
我什至想知道是否有与上述相同的方法 LINQ 读取多维数组。
提前致谢!!
您已经分配了另一个单独的内存块,原始数组 3 超出了范围
Enumerable.ToArray(IEnumerable( Method
从
IEnumerable<T>
创建数组。
这和这样做是一样的。
var arr = new int[3]; // allocate
arr = new int[4]; // allocate again to same variable, which points to new memory
原始分配超出范围
这只是引用在 .net 中的工作方式,当您创建数组时,您在某处分配一部分内存,您的变量引用该部分内存。将新实例分配给该变量时,会在其他位置创建内存的新部分,并且变量将该引用获取到新内存。
因为ToArray
方法将列表中的元素复制到新数组中。