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

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

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

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

對(duì)于值類型的List直接用以下方法就可以復(fù)制:

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

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

1、對(duì)于引用類型的List無法用以上方法進(jìn)行復(fù)制,只會(huì)復(fù)制List中對(duì)象的引用,可以用以下擴(kuò)展方法復(fù)制:

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

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

public static T Clone<T>(T RealObject) 

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

3、利用System.Xml.Serialization來實(shí)現(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);
      }
}

三、對(duì)上述幾種對(duì)象深拷貝進(jìn)行測(cè)試

測(cè)試如下:

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對(duì)象的深度拷貝問題就是小編分享給大家的全部內(nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

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

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

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

    C語言數(shù)據(jù)結(jié)構(gòu)之迷宮問題

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

    C++中pair的用法總結(jié)

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

最新評(píng)論

广德县| 铜陵市| 呼玛县| 马尔康县| 巩义市| 宁强县| 乐业县| 芜湖市| 山西省| 临城县| 新源县| 永宁县| 仁化县| 乳山市| 田阳县| 东丰县| 普兰县| 耿马| 鄂伦春自治旗| 枞阳县| 大化| 大石桥市| 高邮市| 凌云县| 格尔木市| 阿拉善盟| 时尚| 大丰市| 兰坪| 靖远县| 扎囊县| 恭城| 云梦县| 崇州市| 石渠县| 舟曲县| 永福县| 通道| 赤水市| 繁峙县| 龙州县|