日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > C# >内容正文

C#

【转】C#中数组复制的4种方法

發(fā)布時間:2023/12/1 C# 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【转】C#中数组复制的4种方法 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

C#中數(shù)組復制的4種方法

from:http://blog.csdn.net/burningcpu/article/details/1434167

?今天旁邊的同事MM叫我調(diào)了一段程序,她想復制一個數(shù)組,int[] pins = {9,3,4,9};int [] alias = pins;這里出了錯誤,也是錯誤的根源,以上代碼并沒有出錯,但是根本不是復制,因為pins和alias都是引用,存在于堆棧中,而數(shù)據(jù) 9,3,4,3是一個int對象存在于堆中,int [] alias = pins;只不過是創(chuàng)建另一個引用,alias和pins同時指向{9,3,4,3},當修改其中一個引用的時候,勢必影響另一個。復制的意思是新建一個 和被復制對象一樣的對象,在C#語言中應該有如下4種方法來復制。

??? 方法一:使用for循環(huán)

??????? int []pins = {9,3,7,2}
??????? int []copy = new int[pins.length];
????????for(int i =0;i!=copy.length;i++)
??????? {
?????????? copy[i] = pins[i];
???????? }

??? 方法二:使用數(shù)組對象中的CopyTo()方法

??????? int []pins = {9,3,7,2}
??????? int []copy2 = new int[pins.length];
??????? pins.CopyTo(copy2,0);

??? 方法三:使用Array類的一個靜態(tài)方法Copy()

??????? int []pins = {9,3,7,2}
??????? int []copy3 = new int[pins.length];
????????Array.Copy(pins,copy3,copy.Length);

??? 方法四:使用Array類中的一個實例方法Clone(),可以一次調(diào)用,最方便,但是Clone()方法返回的是一個對象,所以要強制轉(zhuǎn)換成恰當?shù)念愵愋汀?/p>

??????? int []pins = {9,3,7,2}
??????? int []copy4 = (int [])pins.Clone();

—————————————————————分隔線——————————————————————————————————————————————

注:Clone()是返回淺表副本,MSDN中是這么寫的:

Array 的淺表副本僅復制 Array 的元素(無論它們是引用類型還是值類型),但不復制這些引用所引用的對象。 新 Array 中的引用與原始 Array 中的引用指向相同的對象。 相比之下, Array 的深層副本會復制元素和元素直接或間接引用的一切。

??? 這個文章總結(jié)的還不錯。另外string類型貌似也是引用類型,但是它的“=”運算應該經(jīng)過重寫的,好像是深層副本。有空再測試一下好了。

轉(zhuǎn)載于:https://www.cnblogs.com/TrueElement/archive/2012/07/19/2599460.html

創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎勵來咯,堅持創(chuàng)作打卡瓜分現(xiàn)金大獎

總結(jié)

以上是生活随笔為你收集整理的【转】C#中数组复制的4种方法的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。