当前位置:  开发笔记 > 编程语言 > 正文

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

如何解决《System.Array.CopyTo()和System.Array.Clone()之间的区别》经验,为你挑选了5个好方法。

System.Array.CopyTo()和之间有什么区别System.Array.Clone()



1> Patrick Desj..:

克隆()方法返回一个新的数组包含原始阵列中的所有元件(浅表副本)对象.所述CopyTo从()方法复制的元素到另一个现有阵列.两者都执行浅拷贝.浅拷贝意味着内容(每个数组元素)包含与原始数组中的元素相同的对象的引用.深层副本(这些方法都不执行)将为每个元素的对象创建一个新实例,从而产生一个不同但相同的对象.

所以区别在于:

1- CopyTo require to have a destination array when Clone return a new array.
2- CopyTo let you specify an index (if required) to the destination array.
编辑:

删除错误的示例.


你的例子是错的.在第一个中,`numbersCopy`只是对分配给`numbers`的数组的另一个引用.这与使用`CopyTo()`方法不同*.如果使用`CopyTo()`,您将得到与`Clone()`示例相同的结果.另外,这是C# - `System.out.println`应该是`Console.WriteLine`.
这个答案,误导**,正如其他人所说的那样是来自这里的复制粘贴:http://geekswithblogs.net/dforhan/archive/2005/12/01/61852.aspx

2> Michael Burr..:

到目前为止没有提到的另一个区别是

Clone()目标阵列,因为一个新的从头开始创建不必还不存在.

CopyTo()不仅目标阵列需要已经存在,它需要足够大,以容纳从您指定为目标的索引源阵列中的所有元素.



3> FlySwat..:

正如@PatrickDesjardins所说,两者都执行浅拷贝(尽管有许多误导的灵魂认为这CopyTo是深刻的复制).

但是,CopyTo允许您将一个数组复制到目标数组中的指定索引,从而为其提供更大的灵活性.



4> João Angelo..:

如许多其他答案中所述,两种方法都执行阵列的浅拷贝.但是,有些差异和建议尚未解决,并在以下列表中突出显示.

特点System.Array.Clone:

使用.NET 4.0进行的测试显示它CopyTo可能因为它使用的速度慢Object.MemberwiseClone ;

需要将结果转换为适当的类型;

生成的数组与源的长度相同.

特点System.Array.CopyTo:

Clone复制到相同类型的数组更快 ;

它调用Array.Copy继承功能,是最有用的功能:

可以将值类型元素框值转换为引用类型元素,例如,将int[]数组复制到object[];

可以将unbox引用类型元素转换为值类型元素,例如,将一个object[]盒装数组复制int到一个int[];

可以对值类型执行扩展转换,例如,将a复制int[]到a long[].

可以向下转换元素,例如,将Stream[]数组复制到一个MemoryStream[](如果源数组中的任何元素不能转换为MemoryStream异常,则抛出).

允许将源复制到长度大于源的目标阵列.

还要注意,这些方法提供支持ICloneableICollection,因此,如果你正在处理,你不应该使用数组类型的变量CloneCopyTo转而使用Array.CopyArray.ConstrainedCopy.受约束的副本确保如果复制操作无法完成,则目标阵列状态不会被破坏.



5> GenZiy..:
object[] myarray = new object[] { "one", 2, "three", 4, "really big number", 2324573984927361 };

//create shallow copy by CopyTo
//You have to instantiate your new array first
object[] myarray2 = new object[myarray.Length];
//but then you can specify how many members of original array you would like to copy 
myarray.CopyTo(myarray2, 0);

//create shallow copy by Clone
object[] myarray1;
//here you don't need to instantiate array, 
//but all elements of the original array will be copied
myarray1 = myarray.Clone() as object[];

//if not sure that we create a shalow copy lets test it
myarray[0] = 0;
Console.WriteLine(myarray[0]);// print 0
Console.WriteLine(myarray1[0]);//print "one"
Console.WriteLine(myarray2[0]);//print "one"

来源

推荐阅读
乐韵答题
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有