程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> C#入門知識 >> 用序列化實現List<T> 實例的深復制(推薦)

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

編輯:C#入門知識

用序列化實現List<T> 實例的深復制(推薦)。本站提示廣大學習愛好者:(用序列化實現List&lt;T&gt; 實例的深復制(推薦))文章只能為提供參考,不一定能成為您想要的結果。以下是用序列化實現List&lt;T&gt; 實例的深復制(推薦)正文


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

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved