为什么大阵列可以同步到小阵列?

时间:2020-12-19 23:57:14

标签: c# arrays

也许这是一件非常简单的事情,但我是出于好奇而问的。我认为上述情况是不应该发生的逻辑错误。有两个数组。第一个数组元素编号为 10。第二个数组元素编号为 20。当您将第二个数组等同于第一个数组时,它直接包含值。但是我将第一个数组的大小设置为 10。

这怎么可能?

示例代码

int[] array1 = new int[10];
int[] array2 = new int[20];
public MainWindow()
{
    InitializeComponent();
    array1 = array2;
}

3 个答案:

答案 0 :(得分:4)

要了解 C# 的基本内容之一是变量 array1array2 是对内存中数组实例的引用

当你运行代码时

array1 = array2;

您没有将 array2 的值写入 array1

您使 array1array2 指向同一个实例。

重复一遍,array1 不会是 array2 的副本。赋值后,这两个变量实际上是同一个数组。

array1 指向的初始 10 元素数组现在已取消引用。垃圾收集器很快就会回收它占用的内存。

答案 1 :(得分:1)

为了更好地理解这一点,您需要了解引用类型值类型之间的区别。您可以获得更多信息here

现在,数组是引用类型,如here解释。所以当你这样做时:

array1 = array2;

array1 现在引用与 array2 相同的内存引用。这意味着对 array1 或 array2 的任何更改都将反映在这两个数组上,因为它们都指向相同的引用。

答案 2 :(得分:0)

这里您没有将 array2 的实际值复制到 array1 中。但是您只是将 array1 的引用更改为 array2 在堆中保存的引用。 如果您确实想复制值,请使用循环或流进行复制。这不是实现您想要的目标的正确方法