用序列化實現(xiàn)List<T> 實例的深復(fù)制(推薦)
如果 List<T> 里的 T 是引用類型(如myClass類),則在 像這種寫法:
List<myClass> lists1 = new List<myClass>() { new myClass(), new myClass() };
List<myClass> lists2 = new List<myClass>(lists1 );
其實是一個淺復(fù)制的過程。
如果要實現(xiàn)深復(fù)制,通過有幾種做法,可以用foreach, 或者重寫Clone()方法。
但最好用和最方便的方法還是使用【序列化】的方式來實現(xiàn)。
序列化是指將對象轉(zhuǎn)換為字節(jié)流的形式,然后保存在內(nèi)存或者數(shù)據(jù)庫中。序列化可以保存對象的狀態(tài)信息,當(dāng)需要使用的時候在反序列化回來。所以將對象序列化可以存儲和交換數(shù)據(jù)。例如如果web 服務(wù)發(fā)送,或者在應(yīng)用程序從這個域發(fā)送到另一個域。
若要序列化對象,您需要待序列化的對象、要包含序列化對象的流,以及一個Formatter。序列化包括:二進制序列化和 xml 序列化。
例如,使用 XmlSerializer ,將要拷貝的對象序列化到流中,然后通過反序列化得到新的對象。
/// <summary> /// 序列化類 /// </summary> public class SerializLog { //1.使用序列化的方式完成 引用對象的 深復(fù)制 是最好的方式 //2.下面的 Clone方法,我需要使用 泛型對象 做為參數(shù),則在 Clone后面需要帶上<T>的聲明,否則編譯出錯 public static T Clone<T>(T realObject) // T 要序列化的對象 { using (Stream stream = new MemoryStream()) // 初始化一個 流對象 { XmlSerializer serializer = new XmlSerializer(typeof(T)); //將要序列化的對象序列化到xml文檔(Formatter) serializer.Serialize(stream, realObject); //將序列后的對象寫入到流中 stream.Seek(0, SeekOrigin.Begin); return (T)serializer.Deserialize(stream);// 反序列化得到新的對象 } } }
以上這篇用序列化實現(xiàn)List
欄 目:C#教程
下一篇:C#接口在派生類和外部類中的調(diào)用方法示例
本文標(biāo)題:用序列化實現(xiàn)List&lt;T&gt; 實例的深復(fù)制(推薦)
本文地址:http://mengdiqiu.com.cn/a1/C_jiaocheng/5891.html
您可能感興趣的文章
- 01-10C#實現(xiàn)txt定位指定行完整實例
- 01-10WinForm實現(xiàn)仿視頻 器左下角滾動新聞效果的方法
- 01-10C#實現(xiàn)清空回收站的方法
- 01-10C#實現(xiàn)讀取注冊表監(jiān)控當(dāng)前操作系統(tǒng)已安裝軟件變化的方法
- 01-10C#實現(xiàn)多線程下載文件的方法
- 01-10C#實現(xiàn)Winform中打開網(wǎng)頁頁面的方法
- 01-10C#實現(xiàn)遠(yuǎn)程關(guān)閉計算機或重啟計算機的方法
- 01-10C#自定義簽名章實現(xiàn)方法
- 01-10C#文件斷點續(xù)傳實現(xiàn)方法
- 01-10winform實現(xiàn)創(chuàng)建最前端窗體的方法


閱讀排行
本欄相關(guān)
- 01-10C#通過反射獲取當(dāng)前工程中所有窗體并
- 01-10關(guān)于ASP網(wǎng)頁無法打開的解決方案
- 01-10WinForm限制窗體不能移到屏幕外的方法
- 01-10WinForm繪制圓角的方法
- 01-10C#實現(xiàn)txt定位指定行完整實例
- 01-10WinForm實現(xiàn)仿視頻 器左下角滾動新
- 01-10C#停止線程的方法
- 01-10C#實現(xiàn)清空回收站的方法
- 01-10C#通過重寫Panel改變邊框顏色與寬度的
- 01-10C#實現(xiàn)讀取注冊表監(jiān)控當(dāng)前操作系統(tǒng)已
隨機閱讀
- 04-02jquery與jsp,用jquery
- 08-05DEDE織夢data目錄下的sessions文件夾有什
- 08-05織夢dedecms什么時候用欄目交叉功能?
- 01-10使用C語言求解撲克牌的順子及n個骰子
- 08-05dedecms(織夢)副欄目數(shù)量限制代碼修改
- 01-10delphi制作wav文件的方法
- 01-11Mac OSX 打開原生自帶讀寫NTFS功能(圖文
- 01-11ajax實現(xiàn)頁面的局部加載
- 01-10C#中split用法實例總結(jié)
- 01-10SublimeText編譯C開發(fā)環(huán)境設(shè)置