首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >System.Array.CopyTo()和System.Array.Clone()之间的区别

System.Array.CopyTo()和System.Array.Clone()之间的区别
EN

Stack Overflow用户
提问于 2008-10-13 18:19:41
回答 13查看 117.1K关注 0票数 93

System.Array.CopyTo()System.Array.Clone()有什么不同

EN

Stack Overflow用户

发布于 2011-03-14 15:31:38

CopyTo()和Clone()都进行了浅层复制。Clone()方法克隆原始数组。它返回一个精确的长度数组。

另一方面,CopyTo()从指定的目标数组索引处开始,将元素从原始数组复制到目标数组。请注意,这会将元素添加到现有的数组中。

下面的代码将与CopyTo()进行深度复制的发布内容相矛盾:

代码语言:javascript
运行
复制
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())将一直复制到第一级(顶层)。但较低的级别不会被复制。如果我们还需要更低级别的拷贝,我们必须显式地做。这就是为什么在克隆或复制引用类型元素之后,克隆或复制的数组中的每个元素引用的内存位置与原始数组中的相应元素引用的内存位置相同。这清楚地表明,不会为较低级别创建单独的实例。如果是这样,则改变复制或克隆的数组中的任何元素的值在原始数组的相应元素中不起作用。

我认为我的解释是详尽的,但我找不到其他方法让它变得易懂。

票数 2
EN
查看全部 13 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/198496

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档