System.Array.CopyTo()
和System.Array.Clone()
有什么不同
发布于 2011-03-14 15:31:38
CopyTo()和Clone()都进行了浅层复制。Clone()方法克隆原始数组。它返回一个精确的长度数组。
另一方面,CopyTo()从指定的目标数组索引处开始,将元素从原始数组复制到目标数组。请注意,这会将元素添加到现有的数组中。
下面的代码将与CopyTo()进行深度复制的发布内容相矛盾:
public class Test
{
public string s;
}
// Write Main() method and within it call test()
private void test()
{
Test[] array = new Test[1];
array[0] = new Test();
array[0].s = "ORIGINAL";
Test[] copy = new Test[1];
array.CopyTo(copy, 0);
// Next line displays "ORIGINAL"
MessageBox.Show("array[0].s = " + array[0].s);
copy[0].s = "CHANGED";
// Next line displays "CHANGED", showing that
// changing the copy also changes the original.
MessageBox.Show("array[0].s = " + array[0].s);
}
让我来解释一下。如果数组的元素是引用类型,则复制( Clone()和CopyTo())将一直复制到第一级(顶层)。但较低的级别不会被复制。如果我们还需要更低级别的拷贝,我们必须显式地做。这就是为什么在克隆或复制引用类型元素之后,克隆或复制的数组中的每个元素引用的内存位置与原始数组中的相应元素引用的内存位置相同。这清楚地表明,不会为较低级别创建单独的实例。如果是这样,则改变复制或克隆的数组中的任何元素的值在原始数组的相应元素中不起作用。
我认为我的解释是详尽的,但我找不到其他方法让它变得易懂。
https://stackoverflow.com/questions/198496
复制相似问题