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

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

 更新時(shí)間:2017年02月19日 16:49:30   投稿:jingxian  
下面小編就為大家?guī)?lái)一篇用序列化實(shí)現(xiàn)List<T> 實(shí)例的深復(fù)制(推薦)。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧

如果 List<T> 里的 T 是引用類(lèi)型(如myClass類(lèi)),則在 像這種寫(xiě)法:

 List<myClass> lists1 = new List<myClass>()

 {

    new myClass(),

    new myClass()

 };

List<myClass> lists2 = new List<myClass>(lists1 );

其實(shí)是一個(gè)淺復(fù)制的過(guò)程。

如果要實(shí)現(xiàn)深復(fù)制,通過(guò)有幾種做法,可以用foreach, 或者重寫(xiě)Clone()方法。

但最好用和最方便的方法還是使用【序列化】的方式來(lái)實(shí)現(xiàn)。

序列化是指將對(duì)象轉(zhuǎn)換為字節(jié)流的形式,然后保存在內(nèi)存或者數(shù)據(jù)庫(kù)中。序列化可以保存對(duì)象的狀態(tài)信息,當(dāng)需要使用的時(shí)候在反序列化回來(lái)。所以將對(duì)象序列化可以存儲(chǔ)和交換數(shù)據(jù)。例如如果web 服務(wù)發(fā)送,或者在應(yīng)用程序從這個(gè)域發(fā)送到另一個(gè)域。

若要序列化對(duì)象,您需要待序列化的對(duì)象、要包含序列化對(duì)象的流,以及一個(gè)Formatter。序列化包括:二進(jìn)制序列化和 xml 序列化。

例如,使用 XmlSerializer ,將要拷貝的對(duì)象序列化到流中,然后通過(guò)反序列化得到新的對(duì)象。

  /// <summary>
  /// 序列化類(lèi)
  /// </summary>
  public class SerializLog
  {
    //1.使用序列化的方式完成 引用對(duì)象的 深復(fù)制 是最好的方式
    //2.下面的 Clone方法,我需要使用 泛型對(duì)象 做為參數(shù),則在 Clone后面需要帶上<T>的聲明,否則編譯出錯(cuò)
    
    public static T Clone<T>(T realObject) // T 要序列化的對(duì)象
    {
      using (Stream stream = new MemoryStream()) // 初始化一個(gè) 流對(duì)象
      {
        XmlSerializer serializer = new XmlSerializer(typeof(T)); //將要序列化的對(duì)象序列化到xml文檔(Formatter)
        serializer.Serialize(stream, realObject); //將序列后的對(duì)象寫(xiě)入到流中
        stream.Seek(0, SeekOrigin.Begin);     
        return (T)serializer.Deserialize(stream);// 反序列化得到新的對(duì)象
      }
    }
  }

以上這篇用序列化實(shí)現(xiàn)List 實(shí)例的深復(fù)制(推薦)就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

最新評(píng)論