Pat*_*ins 52
该克隆()方法返回一个新的数组包含原始阵列中的所有元件(浅表副本)对象.所述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.
Run Code Online (Sandbox Code Playgroud)
编辑:
删除错误的示例.
Mic*_*urr 25
到目前为止没有提到的另一个区别是
Clone()目标阵列,因为一个新的从头开始创建不必还不存在.CopyTo()不仅目标阵列需要已经存在,它需要足够大,以容纳从您指定为目标的索引源阵列中的所有元素.Fly*_*wat 21
正如@PatrickDesjardins所说,两者都执行浅拷贝(尽管有许多误导的灵魂认为这CopyTo是深刻的复制).
但是,CopyTo允许您将一个数组复制到目标数组中的指定索引,从而为其提供更大的灵活性.
Joã*_*elo 19
如许多其他答案中所述,两种方法都执行阵列的浅拷贝.但是,有些差异和建议尚未解决,并在以下列表中突出显示.
CopyTo可能因为它使用的速度慢Object.MemberwiseClone ;Clone复制到相同类型的数组更快 ;Array.Copy继承功能,是最有用的功能:
int[]数组复制到object[];object[]盒装数组复制int到一个int[];int[]到a long[].Stream[]数组复制到一个MemoryStream[](如果源数组中的任何元素不能转换为MemoryStream异常,则抛出).还要注意,这些方法提供支持ICloneable和ICollection,因此,如果你正在处理,你不应该使用数组类型的变量Clone或CopyTo转而使用Array.Copy或Array.ConstrainedCopy.受约束的副本确保如果复制操作无法完成,则目标阵列状态不会被破坏.
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"
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
94916 次 |
| 最近记录: |