我已经读过Array.Clone performs shallow copy,但是这段代码表明创建了原始数组的深层副本,即克隆数组中的任何更改都没有反映在原始数组中
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
我错过了一些明显的东西吗?
答案 0 :(得分:2)
因为这是一个浅拷贝,newArr应该引用arr
不,数组及其元素被复制。但是不会复制对元素中对象的引用。
副本仅下降一级:因此很浅。深层副本将克隆所有引用的对象(但不能用int显示。)
答案 1 :(得分:1)
当复制不可变结构的集合(诸如它的基元是不可变的)时,深复制和浅复制之间没有区别。它们按值复制 - 因此它就像深度复制一样。
请参阅以下内容了解更多信息:What is the difference between a deep copy and a shallow copy?
答案 2 :(得分:0)
尝试相同的代码但使用具有属性为整数的类。由于数组元素是值类型,因此克隆数组的元素是它们自己的"实例"。
示例:
117.214682594
答案 3 :(得分:0)
<>真的很难只使用Array.Clone() 使用像FastDeepCloner这样的插件,它会侵入地克隆对象。
int i = if((0xc0 & c) == 0xc0){return 1;}