国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 編程 > C++ > 正文

淺談C#中List 對(duì)象的深度拷貝問(wèn)題

2020-05-23 13:56:20
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

一、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無(wú)法用以上方法進(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來(lái)實(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ì)象的深度拷貝問(wèn)題就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持VEVB武林網(wǎng)。


發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 嘉义市| 砀山县| 罗甸县| 永济市| 潮安县| 沂源县| 吉安县| 扬中市| 中超| 海口市| 大悟县| 民县| 凭祥市| 建瓯市| 新蔡县| 娄烦县| 罗田县| 山阳县| 神池县| 体育| 开平市| 凤翔县| 玛曲县| 微博| 西安市| 甘孜县| 四川省| 永福县| 宜城市| 河西区| 南漳县| 敦煌市| 汝城县| 永清县| 县级市| 普宁市| 云浮市| 上杭县| 克山县| 长兴县| 阿坝|