国产探花免费观看_亚洲丰满少妇自慰呻吟_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ā)表
主站蜘蛛池模板: 民乐县| 固始县| 嵩明县| 乡城县| 白城市| 陕西省| 韶山市| 新竹市| 旌德县| 永胜县| 康保县| 五大连池市| 灵寿县| 宁海县| 元氏县| 安龙县| 米脂县| 渝中区| 息烽县| 漯河市| 财经| 金堂县| 闻喜县| 崇左市| 阿拉善左旗| 南投县| 柘城县| 陇西县| 武穴市| 双峰县| 惠东县| 安溪县| 宜黄县| 开化县| 肥城市| 平阴县| 梧州市| 嵩明县| 海晏县| 长春市| 南充市|