C# 深拷贝的四种方式
1:利用反射实现

1 public static T DeepCopy(T obj) 2 { 3 //如果是字符串或值类型则直接返回 4 if (obj is string || obj.GetType().IsValueType) return obj; 5 6 object retval = Activator.CreateInstance(obj.GetType()); 7 FieldInfo[] fields = obj.GetType().GetFields(BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.Static); 8 foreach (FieldInfo field in fields) 9 { 10 try { field.SetValue(retval, DeepCopy(field.GetValue(obj))); } 11 catch { } 12 } 13 return (T)retval; 14 }

2:利用xml序列化和反序列化实现

1 public T DeepCopy(T obj) 2 { 3 object retval; 4 using (MemoryStream ms = new MemoryStream()) 5 { 6 XmlSerializer xml = new XmlSerializer(typeof(T)); 7 xml.Serialize(ms, obj); 8 ms.Seek(0, SeekOrigin.Begin); 9 retval = xml.Deserialize(ms); 10 ms.Close(); 11 } 12 return (T)retval; 13 }

3:利用二进制序列化和反序列化实现

1 public static T DeepCopy(T obj) 2 { 3 object retval; 4 using (MemoryStream ms = new MemoryStream()) 5 { 6 BinaryFormatter bf = new BinaryFormatter(); 7 //序列化成流 8 bf.Serialize(ms, obj); 9 ms.Seek(0, SeekOrigin.Begin); 10 //反序列化成对象 11 retval = bf.Deserialize(ms); 12 ms.Close(); 13 } 14 return (T)retval; 15 }

4:利用silverlight DataContractSerializer实现,用于在silverlight 客户端使用

1 public static T DeepCopy(T obj) 2 { 3 object retval; 4 using (MemoryStream ms = new MemoryStream()) 5 { 6 DataContractSerializer ser = new DataContractSerializer(typeof(T)); 7 ser.WriteObject(ms, obj); 8 ms.Seek(0, SeekOrigin.Begin); 9 retval = ser.ReadObject(ms); 10 ms.Close(); 11 } 12 return (T)retval;

专业从事基于C#,WinForm ,WPF,Silverlight,WCF以及MS Sql Server 2000/2005/2008/2012 Oracle 9i/10g/11g数据库系统的ERP,CRM,企业进销存等各种数据库管理系统开发。Asp.net,Asp.net mvc,Webservice,WCF, Webapi等服务程序开发。
基于Oracle MySQL MSSql postgresql各种数据库的管理系统数据同步服务。以及基于MapXtreme, Arcgis Engine ,以及基于Arcgis for silverlight/Javascript的WebGIS等相关的GIS系统二次开发。基于Windows 10 Mobile的移动端开发方案。针对各种系统的二次开发维护,并提供相关开发的技术性支持,如程序BUG解决,应用系统架构,技术难题攻克等相关技术服务。
联系方式: QQ :80163278(devgis) 邮箱:devgis@qq.com
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 【杭电多校比赛记录】2025“钉耙编程”中国大学生算法设计春季联赛(1)