用序列化實現List<T> 實例的深復制(推薦)。本站提示廣大學習愛好者:(用序列化實現List<T> 實例的深復制(推薦))文章只能為提供參考,不一定能成為您想要的結果。以下是用序列化實現List<T> 實例的深復制(推薦)正文
如果 List<T> 裡的 T 是引用類型(如myClass類),則在 像這種寫法:
List<myClass> lists1 = new List<myClass>() { new myClass(), new myClass() };
List<myClass> lists2 = new List<myClass>(lists1 );
其實是一個淺復制的過程。
如果要實現深復制,通過有幾種做法,可以用foreach, 或者重寫Clone()方法。
但最好用和最方便的方法還是使用【序列化】的方式來實現。
序列化是指將對象轉換為字節流的形式,然後保存在內存或者數據庫中。序列化可以保存對象的狀態信息,當需要使用的時候在反序列化回來。所以將對象序列化可以存儲和交換數據。例如如果web 服務發送,或者在應用程序從這個域發送到另一個域。
若要序列化對象,您需要待序列化的對象、要包含序列化對象的流,以及一個Formatter。序列化包括:二進制序列化和 xml 序列化。
例如,使用 XmlSerializer ,將要拷貝的對象序列化到流中,然後通過反序列化得到新的對象。
/// <summary> /// 序列化類 /// </summary> public class SerializLog { //1.使用序列化的方式完成 引用對象的 深復制 是最好的方式 //2.下面的 Clone方法,我需要使用 泛型對象 做為參數,則在 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);// 反序列化得到新的對象 } } }
以上這篇用序列化實現List