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

首頁 > 編程 > C# > 正文

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

2020-01-24 00:45:12
字體:
來源:轉載
供稿:網友

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

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 方山县| 沽源县| 哈尔滨市| 永仁县| 上杭县| 兴业县| 瓦房店市| 宣汉县| 黄石市| 龙游县| 奎屯市| 怀远县| 北辰区| 乌拉特后旗| 自治县| 定南县| 湖南省| 钦州市| 大悟县| 玉山县| 大田县| 安远县| 宜兴市| 岚皋县| 丰镇市| 宣威市| 涞水县| 夏河县| 乐安县| 三江| 汤阴县| 雷山县| 银川市| 团风县| 新邵县| 襄垣县| 樟树市| 华容县| 松潘县| 漳浦县| 含山县|