C#中4種深拷貝方法介紹

概述
為什么要用到深拷貝呢?比如我們建了某個(gè)類Person,并且實(shí)例化出一個(gè)對(duì)象,然后,突然需要把這個(gè)對(duì)象復(fù)制一遍,并且復(fù)制出來(lái)的對(duì)象要跟之前的一模一樣,來(lái)看下我們一般會(huì)怎么做。
1、利用反射實(shí)現(xiàn)
public static T DeepCopy<T>(T obj){//如果是字符串或值類型則直接返回if (obj is string || obj.GetType().IsValueType) return obj;object retval = Activator.CreateInstance(obj.GetType());FieldInfo[] fields = obj.GetType().GetFields(BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.Static);foreach (FieldInfo field in fields){try { field.SetValue(retval, DeepCopy(field.GetValue(obj))); }catch { }}return (T)retval;}
2、利用xml序列化和反序列化實(shí)現(xiàn)
public T DeepCopy<T>(T obj){object retval;using (MemoryStream ms = new MemoryStream()){XmlSerializer xml = new XmlSerializer(typeof(T));xml.Serialize(ms, obj);ms.Seek(0, SeekOrigin.Begin);retval = xml.Deserialize(ms);ms.Close();}return (T)retval;}
3、利用二進(jìn)制序列化和反序列化實(shí)現(xiàn)
public static T DeepCopy<T>(T obj){object retval;using (MemoryStream ms = new MemoryStream()){BinaryFormatter bf = new BinaryFormatter();//序列化成流bf.Serialize(ms, obj);ms.Seek(0, SeekOrigin.Begin);//反序列化成對(duì)象retval = bf.Deserialize(ms);ms.Close();}return (T)retval;}
4、DataContractSerializer實(shí)現(xiàn)
利用silverlight DataContractSerializer實(shí)現(xiàn),用于在silverlight 客戶端使用
public static T DeepCopy<T>(T obj){object retval;using (MemoryStream ms = new MemoryStream()){DataContractSerializer ser = new DataContractSerializer(typeof(T));ser.WriteObject(ms, obj);ms.Seek(0, SeekOrigin.Begin);retval = ser.ReadObject(ms);ms.Close();}return (T)retval;
【推薦】.NET Core開(kāi)發(fā)實(shí)戰(zhàn)視頻課程 ★★★
.NET Core實(shí)戰(zhàn)項(xiàng)目之CMS 第一章 入門篇-開(kāi)篇及總體規(guī)劃
【.NET Core微服務(wù)實(shí)戰(zhàn)-統(tǒng)一身份認(rèn)證】開(kāi)篇及目錄索引
Redis基本使用及百億數(shù)據(jù)量中的使用技巧分享(附視頻地址及觀看指南)
.NET Core中的一個(gè)接口多種實(shí)現(xiàn)的依賴注入與動(dòng)態(tài)選擇看這篇就夠了
10個(gè)小技巧助您寫出高性能的ASP.NET Core代碼
用abp vNext快速開(kāi)發(fā)Quartz.NET定時(shí)任務(wù)管理界面
在ASP.NET Core中創(chuàng)建基于Quartz.NET托管服務(wù)輕松實(shí)現(xiàn)作業(yè)調(diào)度
現(xiàn)身說(shuō)法:實(shí)際業(yè)務(wù)出發(fā)分析百億數(shù)據(jù)量下的多表查詢優(yōu)化
評(píng)論
圖片
表情
