【问题标题】:Why do we initialize the size of an array, if it is possible to add elements more than the size?如果可以添加超过大小的元素,我们为什么要初始化数组的大小?
【发布时间】:2020-06-18 05:26:34
【问题描述】:

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

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

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

提前致谢!!!

【问题讨论】:

  • ToArray创建一个新数组

标签: c# arrays linq multidimensional-array initialization


【解决方案1】:

你已经分配了另一个单独的内存块,原来的 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 中的工作方式,当您创建一个数组时,您会在某处分配一部分内存,而您的变量会引用该部分内存。当您为该变量分配一个新实例时,您会在其他地方创建一个新的内存部分,并且您的变量会将该引用引用到新内存。

【讨论】:

  • 好的@TheGeneral。非常感谢!!!但是我们是否有类似的方式或方法来读取多维数组?
  • @Saranya 你需要更具体,不清楚你在问什么
  • 如果我理解您的要求,您可以使用任何变量、引用或值类型来完成,这正是 .net 的工作方式
【解决方案2】:

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

【讨论】:

  • 好的,Vivek。非常感谢!!!但是我们是否有类似的方式或方法来读取多维数组?
猜你喜欢
  • 1970-01-01
  • 2020-08-26
  • 2020-03-20
  • 1970-01-01
  • 2015-07-25
  • 2021-12-18
  • 1970-01-01
  • 2013-02-06
  • 1970-01-01
相关资源
最近更新 更多