欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

用序列化實現(xiàn)List<T> 實例的深復(fù)制(推薦)

 更新時間:2017年02月19日 16:49:30   投稿:jingxian  
下面小編就為大家?guī)硪黄眯蛄谢瘜崿F(xiàn)List<T> 實例的深復(fù)制(推薦)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧

如果 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)信息,當需要使用的時候在反序列化回來。所以將對象序列化可以存儲和交換數(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 實例的深復(fù)制(推薦)就是小編分享給大家的全部內(nèi)容了,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • C#實現(xiàn)事件總線的方法示例

    C#實現(xiàn)事件總線的方法示例

    事件總線是一種用于在應(yīng)用程序內(nèi)部或跨應(yīng)用程序組件之間進行事件通信的機制,本文主要介紹了C#實現(xiàn)事件總線的方法示例,具有一定的參考價值,感興趣的可以了解一下
    2024-02-02
  • 用幾行C#代碼實現(xiàn)定時關(guān)機/重啟(超詳細!建議新手練習(xí))

    用幾行C#代碼實現(xiàn)定時關(guān)機/重啟(超詳細!建議新手練習(xí))

    有很多的軟件都實現(xiàn)了自動關(guān)機這樣的功能,下面這篇文章主要給大家介紹了關(guān)于利用幾行C#代碼實現(xiàn)定時關(guān)機/重啟的相關(guān)資料,文中通過圖文介紹的非常詳細,需要的朋友可以參考下
    2022-12-12
  • C#中讓控件全屏顯示的實現(xiàn)代碼(WinForm)

    C#中讓控件全屏顯示的實現(xiàn)代碼(WinForm)

    有時候需要讓窗口中某一塊的內(nèi)容全屏顯示,比如視頻播放、地圖等等。經(jīng)過摸索,暫時發(fā)現(xiàn)兩種可行方法,如果有誰知道其他方法,敬請告知
    2012-04-04
  • C#結(jié)合JavaScript實現(xiàn)上傳視頻到騰訊云點播平臺的操作方法

    C#結(jié)合JavaScript實現(xiàn)上傳視頻到騰訊云點播平臺的操作方法

    這篇文章主要介紹了C#結(jié)合JavaScript實現(xiàn)上傳視頻到騰訊云點播平臺,上傳視頻功能,主要要解決兩個問題,一是在服務(wù)端通過C#生成簽名和SDKID,二是在客戶端通過JavaScript上傳視頻到騰訊云點播服務(wù)器,感興趣的朋友跟隨小編一起看看吧
    2023-11-11
  • C#對Windows服務(wù)組的啟動與停止操作

    C#對Windows服務(wù)組的啟動與停止操作

    這篇文章主要為大家詳細介紹了C#對Windows服務(wù)組的啟動與停止操作,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-03-03
  • UGUI ScrollRect實現(xiàn)帶按鈕翻頁支持拖拽

    UGUI ScrollRect實現(xiàn)帶按鈕翻頁支持拖拽

    這篇文章主要為大家詳細介紹了UGUI ScrollRect實現(xiàn)帶按鈕翻頁支持拖拽,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-05-05
  • 調(diào)整C#中數(shù)組大小的方法

    調(diào)整C#中數(shù)組大小的方法

    數(shù)組存儲多個相同類型的一種非常常用的數(shù)據(jù)結(jié)構(gòu),它長度是固定,也就是數(shù)組一旦創(chuàng)建大小就固定了,C# 數(shù)組不支持動態(tài)長度,那在C#中是否有方法可以調(diào)整數(shù)組大小呢?本文將通過示例介紹一種調(diào)整一維數(shù)組大小的方法,需要的朋友可以參考下
    2024-06-06
  • C#實現(xiàn)的序列化通用類實例

    C#實現(xiàn)的序列化通用類實例

    這篇文章主要介紹了C#實現(xiàn)的序列化通用類,實例分析了C#序列化與反序列化操作相關(guān)技巧,需要的朋友可以參考下
    2015-04-04
  • 淺析C#中g(shù)oto跳轉(zhuǎn)語句的用法

    淺析C#中g(shù)oto跳轉(zhuǎn)語句的用法

    在我們?nèi)粘9ぷ髦谐S玫腃#跳轉(zhuǎn)語句有break、continue、return,但是還有一個C#跳轉(zhuǎn)語句很多同學(xué)可能都比較的陌生就是goto,下面我們就來看看goto跳轉(zhuǎn)語句的用法吧
    2024-03-03
  • winform使用委托和事件來完成兩個窗體之間通信的實例

    winform使用委托和事件來完成兩個窗體之間通信的實例

    這篇文章介紹了winform使用委托和事件來完成兩個窗體之間通信的實例,有需要的朋友可以參考一下
    2013-09-09

最新評論