日期:2014-05-18  浏览次数:20740 次

关于拷贝的问题!请看下!
C# code
  
 int[] a = new int[len];
 int[] b = new int[len];
 list.Add((int[])a.Clone());
                        list.Add((int[])b.Clone());

1.A与B执行的是浅拷贝吗?
2.
主要问题:
如果,我去掉Clone(),我list里面的值是全部相等的!
而我增加上去Clone(),那么他会随着值的改变而改变!
为什么会这样?


是不是说我不加clone的话增加的是值类型的副本!而增加clone是对引用类型的改变?


------解决方案--------------------
clone是一个副本

int[] a = new int[3]{1,2,3};
int[] b = new int[3];
int[] c = (int[])a.Clone();
c[1] = 10;
改变c的内容,不会 影响a
------解决方案--------------------
如果原数组中的元素都是值类型,这个就相当于深拷贝,如果原数组中的元素是引用类型,那么就相当于浅拷贝。

 int[] arrOriginal = { 1, 2, 3, 4 };
int[] arrCopyDirect = arrOriginal; //直接浅拷贝
int[] arrCopyClone = (int[])arrOriginal.Clone(); //Clone方法 


List<int> ll = new List<int>();
ll.AddRange((int[])arrOriginal);

List<int> l2 = new List<int>();
l2.AddRange((int[])arrOriginal.Clone());

arrOriginal[0] = 0;
Console.WriteLine();