资源描述:
《C# 拷贝数组的几种方式》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、C#拷贝数组的几种方式C#中数组复制有多种方法数组间的复制,int[]pins={9,3,4,9};int[]alias=pins;这里出了错误,也是错误的根源,以上代码并没有出错,但是根本不是复制,因为pins和alias都是引用,存在于堆栈中,而数据9,3,4,3是一个int对象存在于堆中,int[]alias=pins;只不过是创建另一个引用,alias和pins同时指向{9,3,4,3},当修改其中一个引用的时候,势必影响另一个。复制的意思是新建一个和被复制对象一样的对象,在C#语言中应该有如下4种方法来复制。方法一:使用for循环int[]pins={
2、9,3,7,2}int[]copy=newint[pins.length];for(inti=0;i!=copy.length;i++){copy[i]=pins[i];}方法二:使用数组对象中的CopyTo()方法int[]pins={9,3,7,2}int[]copy2=newint[pins.length];pins.CopyTo(copy2,0);方法三:使用Array类的一个静态方法Copy()int[]pins={9,3,7,2}int[]copy3=newint[pins.length];Array.Copy(pins,copy3,copy.Len
3、gth);方法四:使用Array类中的一个实例方法Clone(),可以一次调用,最方便,但是Clone()方法返回的是一个对象,所以要强制转换成恰当的类类型。int[]pins={9,3,7,2}int[]copy4=(int[])pins.Clone();方法五:string[]student1={"$","$","c","m","d","1","2","3","1","2","3"};string[]student2={"0","1","2","3","4","5","6","6","1","8","16","10","45","37","82"};Arra
4、yListstudent=newArrayList();foreach(strings1instudent1){student.Add(s1);}foreach(strings2instudent2){student.Add(s2);}string[]copyAfter=(string[])student.ToArray(typeof(string));两个数组合并,最后把合并后的结果赋给copyAfter数组,这个例子可以灵活变通,很多地方可以用。首先说明一下,数组是引用类型的,所以注意不要在复制时复制了地址而没有复制数值哦!其实在复制数组的时候,一定要用ne
5、w在堆中开辟一块新的空间专门用于存放数组,这样才是有效的。(1)int[]pins={9,3,7,2};int[]copy=newint[pins.length];for(inti=0;i6、Array.Copy(pins,copy,copy.Length)(5)Int[]copy=(int[])pins.Clone();这里说明一下为什么要用到int[]的强制类型转换,原因就在于Clone的结果类型是object的,所以需要强制转换为int[]Object类其实就是我们所有类的基类。C#数组中CopyTo()和Clone()的区别(转)CopyTo()和Clone()1.CopyTo()和Clone()相信大多数C#程序员都有查阅MSDN的好习惯,但是MSDN中提到这两个方法最大的区别就是:一个方法创建了一个新Array对象,一个方法只是复制了Ar
7、ray引用.这句话本身没有错误,而且也正是他们的区别所在.只是这样会让人感到很迷惑.到底是什么区别呢?这里还是先说说他们的共同点:CopyTo()和Clone()都属于浅拷贝,这一点是毋庸置疑的.对于浅拷贝:如果数组中的成员为值类型(如:int,float,double,byte等),则完全复制数值到目标数组中,如果是引用类型(如用户自定义类型:classStudent,classPeople,或者是类库中的类类型:ArrayList等),则指复制引用给目标数组.那么CopyTo()和Clone()方法的区别是什么呢?其实他们的区别,也就是MSDN上说的最大的区
8、别就是用法上的区别.我们