C#中复制数组

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/cloproad/article/details/78864266
因为数组是引用类型,所以将一个数组变量赋值给另一个数组变量后,这两个引用会指向同一个数组对象,因此对一个数组进行改变会影响到另一个数组的结构。

而复制数组会创建一个数组的副本(浅表副本)。两种方式:1、实例方法:a.Clone( );    2、静态方法:Array.Copy(...);

1、 数组的元素是值类型

对复制数组或原数组的修改不会影响到另一个数组,因为值类型的复制只是拷贝原来的值,会重新分配内存。如下:

int [] array1 = {1,2};
int [] array2 = (int [])array1.Clone();
// Clone() 返回的是object 类型,需要进行类型转换


2、 数组的元素是引用类型

对复制数组或原数组中元素的修改会影响到另一个数组,因为数组的元素是引用类型,复制元素时只是复制了引用。如下:


// Person 类,有一个构造函数,初始化里面的姓名字段
Person [] array1 = {new Person("a"),new Person("b")};
Person [] array2 = (Person[]) array1.Clone();

另一种方法:Array.Copy(...)  比较灵活,可以部分复制

如下所示:需要原数组,目标数组,默认从0开始,复制 length长度的值,也可以自定义原数组的起始下标,目标数组的起始下标。

public static void Copy(Array sourceArray,Array destinationArray,int length)
public static void Copy(Array sourceArray,int sourceIndex,Array destinationArray,int destinationIndex,int length)
还有另外两个重载方法,不过是将上面两个方法的int 类型变成 long 类型。

注意:目标数组的阶数要与原数组保持一致,复制长度要小于等于两个数组的长度最小值。


int[] aa = {1,3,4,6};
int[] bb = new int [8];
Array.Copy(aa,bb,aa.Length);
// 输出bb数组,结果是: 1,3,4,6,0,0,0,0
注意:
1.下标需要小于数组的长度
2.(复制长度 <= aa.length - 起始下标1)
3.(复制长度 <= bb.length - 起始下标2)
int[] aa = {1,3,4,6};
int[] bb = new int [8];
Array.Copy(aa,1,bb,2,3);
// 从aa数组的下标1处开始复制,复制到bb数组下标2开始的位置,复制长度是3
// 输出bb数组,结果是: 0,0,3,4,6,0,0,0

当需要的复制数组很多并且处理方法有多个时,可以考虑使用部分数组,更加方便。C#中部分数组:点击打开链接
---------------------
作者:cloproad
来源:CSDN
原文:https://blog.csdn.net/cloproad/article/details/78864266
版权声明:本文为博主原创文章,转载请附上博文链接!

原文地址:https://www.cnblogs.com/dearzhoubi/p/9834995.html