C#中4種深拷貝方法介紹
1:利用反射實(shí)現(xiàn)
public static T DeepCopy<T>(T obj) { //如果是字符串或值類(lèi)型則直接返回 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:利用silverlight DataContractSerializer實(shí)現(xiàn),用于在silverlight 客戶(hù)端使用
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;
補(bǔ)充:第一個(gè)已經(jīng)通過(guò)遞歸實(shí)現(xiàn)了深拷貝。
相關(guān)文章
淺談C#中HttpWebRequest與HttpWebResponse的使用方法
本篇文章主要介紹了淺談C#中HttpWebRequest與HttpWebResponse的使用方法,具有一定的參考價(jià)值,有興趣的可以了解一下。2017-01-01C#數(shù)據(jù)結(jié)構(gòu)與算法揭秘三 鏈表
這節(jié)我們討論鏈表的基本操作,并且畫(huà)圖以證明,下屆中我們將討論雙向鏈表,環(huán)形鏈表 應(yīng)用舉例2012-11-11C#實(shí)現(xiàn)多線(xiàn)程編程的簡(jiǎn)單案例
這篇文章介紹了C#實(shí)現(xiàn)多線(xiàn)程編程的簡(jiǎn)單案例,文中通過(guò)示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-04-04C#實(shí)現(xiàn)生成所有不重復(fù)的組合功能示例
這篇文章主要介紹了C#實(shí)現(xiàn)生成所有不重復(fù)的組合功能,涉及C#數(shù)學(xué)運(yùn)算中組合數(shù)運(yùn)算的相關(guān)原理應(yīng)用操作技巧,需要的朋友可以參考下2017-12-12利用AOP實(shí)現(xiàn)SqlSugar自動(dòng)事務(wù)
這篇文章主要為大家詳細(xì)介紹了利用AOP實(shí)現(xiàn)SqlSugar自動(dòng)事務(wù),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-10-10C#實(shí)現(xiàn)把科學(xué)計(jì)數(shù)法(E)轉(zhuǎn)化為正常數(shù)字值
這篇文章主要介紹了C#實(shí)現(xiàn)把科學(xué)計(jì)數(shù)法(E)轉(zhuǎn)化為正常數(shù)字值,本文直接給出代碼實(shí)例,需要的朋友可以參考下2015-06-06