最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

淺談C#中List<T>對象的深度拷貝問題

 更新時間:2017年01月18日 10:43:26   投稿:jingxian  
下面小編就為大家?guī)硪黄獪\談C#中List<T>對象的深度拷貝問題。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧

一、List<T>對象中的T是值類型的情況(int 類型等)

對于值類型的List直接用以下方法就可以復制:

List<T> oldList = new List<T>(); 
oldList.Add(..); 
List<T> newList = new List<T>(oldList); 

二、List<T>對象中的T是引用類型的情況(例如自定義的實體類)

1、對于引用類型的List無法用以上方法進行復制,只會復制List中對象的引用,可以用以下擴展方法復制:

static class Extensions 
 { 
     public static IList<T> Clone<T>(this IList<T> listToClone) where T: ICloneable 
     { 
         return listToClone.Select(item => (T)item.Clone()).ToList(); 
     } 
 //當然前題是List中的對象要實現(xiàn)ICloneable接口
 } 

2、另一種用序列化的方式對引用對象完成深拷貝,此種方法最可靠

public static T Clone<T>(T RealObject) 

{ 
   using (Stream objectStream = new MemoryStream()) 
   { 
      //利用 System.Runtime.Serialization序列化與反序列化完成引用對象的復制
       IFormatter formatter = new BinaryFormatter(); 
       formatter.Serialize(objectStream, RealObject); 
       objectStream.Seek(0, SeekOrigin.Begin); 
       return (T)formatter.Deserialize(objectStream); 
   } 
}

3、利用System.Xml.Serialization來實現(xiàn)序列化與反序列化

public static T Clone<T>(T RealObject) 
{ 
      using(Stream stream=new MemoryStream())
      {
        XmlSerializer serializer = new XmlSerializer(typeof(T));
        serializer.Serialize(stream, RealObject);
        stream.Seek(0, SeekOrigin.Begin);
        return (T)serializer.Deserialize(stream);
      }
}

三、對上述幾種對象深拷貝進行測試

測試如下:

using System;
using System.Collections.Generic;
using System.Collections ;
using System.Linq;
using System.Text;
using System.IO;
using System.Runtime.Serialization;
using System.Runtime.Serialization.Formatters.Binary;

namespace LINQ
{
  [Serializable]
  public class tt
  {
    private string name = "";

    public string Name
    {
      get { return name; }
      set { name = value; }
    }
    private string sex = "";

    public string Sex
    {
      get { return sex; }
      set { sex = value; }
    }
  }

  class LINQTest
  {
    public static T Clone<T>(T RealObject) 
    { 
      using (Stream objectStream = new MemoryStream()) 
      { 
        IFormatter formatter = new BinaryFormatter(); 
        formatter.Serialize(objectStream, RealObject); 
        objectStream.Seek(0, SeekOrigin.Begin); 
        return (T)formatter.Deserialize(objectStream); 
      } 
    }


    public static void Main()
    {
      List<tt> lsttt = new List<tt>();
      tt tt1 = new tt();
      tt1.Name = "a1";
      tt1.Sex = "20";
      lsttt.Add(tt1);
      List<tt> l333 = new List<tt>();
      l333.Add(Clone<tt>(lsttt[0]));
      l333[0].Name = "333333333";
   }
 }
}

以上這篇淺談C#中List對象的深度拷貝問題就是小編分享給大家的全部內(nèi)容了,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關文章

  • 《C++ primer plus》讀書筆記(三)

    《C++ primer plus》讀書筆記(三)

    本文是C++讀書筆記系列的第三篇,是讀完《C++ primer plus》一書第九、十兩章記錄下來的筆記,學習C++的同學可以看看參考下。
    2014-10-10
  • C語言數(shù)據(jù)結構之迷宮問題

    C語言數(shù)據(jù)結構之迷宮問題

    這篇文章主要為大家詳細介紹了C語言數(shù)據(jù)結構之迷宮問題,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-03-03
  • C++中pair的用法總結

    C++中pair的用法總結

    pair是C++STL(標準模板庫)中的一個現(xiàn)有容器,它將2個數(shù)據(jù)整合成一組數(shù)據(jù),當我們類似需求的時候就可以使用到pair,pair的本質(zhì)其實就是個結構體,本文將詳細的給大家介紹pair用法,感興趣的同學可以參考閱讀
    2023-05-05
  • C++實操之內(nèi)聯(lián)成員函數(shù)介紹

    C++實操之內(nèi)聯(lián)成員函數(shù)介紹

    大家好,本篇文章主要講的是C++實操之內(nèi)聯(lián)成員函數(shù)介紹,感興趣的同學趕快來看一看吧,對你有幫助的話記得收藏一下,方便下次瀏覽
    2021-12-12
  • C++內(nèi)存泄漏的檢測與實現(xiàn)詳細流程

    C++內(nèi)存泄漏的檢測與實現(xiàn)詳細流程

    內(nèi)存泄漏(memory leak) 是指由于疏忽或錯誤造成了程序未能釋放掉不再使用的內(nèi)存的情況。內(nèi)存泄漏并非指內(nèi)存在物理上的消失,而是應用程序分配某段內(nèi)存后,由于設計錯誤,失去了對該段內(nèi)存的控制,因而造成了內(nèi)存的浪費
    2022-08-08
  • vscode+leetcode環(huán)境配置方法

    vscode+leetcode環(huán)境配置方法

    這篇文章主要介紹了vscode+leetcode環(huán)境配置,本文通過實例圖文相結合給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-03-03
  • C語言商品銷售系統(tǒng)源碼分享

    C語言商品銷售系統(tǒng)源碼分享

    這篇文章主要為大家分享了C語言商品銷售系統(tǒng)源碼,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-02-02
  • Opencv 視頻轉(zhuǎn)為圖像序列的實現(xiàn)

    Opencv 視頻轉(zhuǎn)為圖像序列的實現(xiàn)

    今天小編就為大家分享一篇Opencv 視頻轉(zhuǎn)為圖像序列的實現(xiàn),具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-12-12
  • C語言實現(xiàn)時間處理工具的示例代碼

    C語言實現(xiàn)時間處理工具的示例代碼

    這篇文章主要為大家詳細介紹了利用C語言實現(xiàn)時間處理工具的相關資料,文中的示例代碼講解詳細,具有一定的借鑒價值,需要的可以參考一下
    2022-09-09
  • c語言實現(xiàn)24小時制轉(zhuǎn)換為12小時制示例

    c語言實現(xiàn)24小時制轉(zhuǎn)換為12小時制示例

    這篇文章主要介紹了c語言實現(xiàn)24小時制轉(zhuǎn)換為12小時制示例,需要的朋友可以參考下
    2014-04-04

最新評論

朝阳区| 泸州市| 丹阳市| 上栗县| 运城市| 睢宁县| 中方县| 大田县| 留坝县| 博兴县| 汝城县| 利津县| 桑植县| 都江堰市| 泗洪县| 高陵县| 普定县| 甘泉县| 甘肃省| 建德市| 班戈县| 修水县| 红河县| 台南县| 东阳市| 蓬安县| 塘沽区| 湖州市| 光泽县| 长武县| 尖扎县| 蒲城县| 区。| 深水埗区| 海盐县| 仙游县| 句容市| 姜堰市| 宝山区| 尼勒克县| 柘城县|