国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > C# > 正文

用序列化實現List 實例的深復制(推薦)

2019-10-29 21:13:29
字體:
來源:轉載
供稿:網友

如果 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 實例的深復制(推薦)就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支持VEVB武林網。


注:相關教程知識閱讀請移步到c#教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 任丘市| 湄潭县| 沧州市| 乐安县| 兰西县| 噶尔县| 剑河县| 阿合奇县| 大理市| 两当县| 锦屏县| 油尖旺区| 嘉善县| 丰宁| 称多县| 九龙坡区| 湖南省| 海盐县| 西吉县| 深圳市| 班玛县| 莲花县| 江陵县| 大新县| 轮台县| 当涂县| 利川市| 双峰县| 南漳县| 武乡县| 萝北县| 巨鹿县| 台东市| 德阳市| 房产| 获嘉县| 道孚县| 林州市| 抚远县| 龙南县| 康平县|