Array.Clone()执行深层复制而不是浅拷贝
我读过Array.Clone执行浅拷贝,但是此代码建议创建原始数组的深层副本,即克隆数组中的任何更改都不会反映到原始数组中
int[] arr = new int[] { 99, 98, 92, 97, 95 };
int[] newArr = (int[])arr.Clone();
//because this is a shallow copy newArr should refer arr
newArr[0] = 100;
//expected result 100
Console.WriteLine(arr[0]);//print 99
我在这里错过了明显的东西吗?
当复制一个不可变结构集合(基元是不可变的基元)时,深和浅拷贝之间没有区别。 它们被复制 - 因此它就像深度复制一样。
有关差异的更多信息,请参阅以下内容:深拷贝和浅拷贝之间有什么区别?
因为这是一个浅拷贝newArr应该引用arr
不,数组及其元素被复制。 但是对元素中对象的引用不会被复制。
副本只有一个层次:因此很浅。 深层副本可以克隆所有引用的对象(但不能用int整体显示)。
尝试使用相同的代码,但使用具有整数属性的类。 由于数组元素是值类型,克隆数组的元素是它们自己的“实例”。
例:
class SomeClass {
public Int32 SomeProperty { get; set; }
}
SomeClass[] arr = new [] {
new SomeClass { SomeProperty = 99 },
new SomeClass { SomeProperty = 98 },
new SomeClass { SomeProperty = 92 },
new SomeClass { SomeProperty = 97 },
new SomeClass { SomeProperty = 95 }
}
SomeClass[] newArr = (SomeClass[])arr.Clone();
newArr[0].SomeProperty = 100;
Console.WriteLine(arr[0].SomeProperty);
链接地址: http://www.djcxy.com/p/40801.html
上一篇: Array.Clone() performs deep copy instead of shallow copy
下一篇: Why is the Object class's clone() method giving a deep copy of object?