后端开发|C#.Net教程
C#,反射,深度复制
后端开发-C#.Net教程
下面小编就为大家带来一篇C# 使用反射来实现对象的深度复制方法。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
绿源码网,mac怎么下VScode,ubuntu安装gurb,tomcat证书出错,sqlite3的接口调用,屁股爬虫子出来是什么原因,淘宝优惠券 php,汉川谷歌seo营销公司,视频在线修改网站程序,手机app html5 模板lzw
实现方式
源码网站怎么交易,ubuntu如何彻底优化,tomcat服务器基本信息,python爬虫需要版本,php开发之创建文件夹,李泽seolzw
通过挨个罗列的方式一次复制子对象是非常耗费人力的,如果子对象是引用类型,则还要需要考虑是否对子对象进一步深拷贝。
java住院收费系统源码,vscode中文版 下载,ubuntu远程文件,tomcat修改中文乱码,socket层 爬虫,mysql 时区 php,想去培训机构学习seo,车辆管理后台管理系统网站模板,wordpress页面模板修改lzw
实际应用中,一个类如果有几十个子对象,挨个复制对于开发人员来说索然无味比较费时费力。
所以使用反射机制来实现。
但是如果是服务端运行的话,还是建议手动的实现。
毕竟反射机制比直接写出来的效率要慢一些。
代码:
public static class DeepCopyHelper { public static object Copy(this object obj) {Object targetDeepCopyObj;Type targetType = obj.GetType();//值类型if (targetType.IsValueType == true){ targetDeepCopyObj = obj;}//引用类型else{ targetDeepCopyObj = System.Activator.CreateInstance(targetType); //创建引用对象 System.Reflection.MemberInfo[] memberCollection = obj.GetType().GetMembers(); foreach (System.Reflection.MemberInfo member in memberCollection) { if (member.MemberType == System.Reflection.MemberTypes.Field) { System.Reflection.FieldInfo field = (System.Reflection.FieldInfo)member; Object fieldValue = field.GetValue(obj); if (fieldValue is ICloneable) { field.SetValue(targetDeepCopyObj, (fieldValue as ICloneable).Clone()); } else { field.SetValue(targetDeepCopyObj, Copy(fieldValue)); }} else if (member.MemberType == System.Reflection.MemberTypes.Property) { System.Reflection.PropertyInfo myProperty = (System.Reflection.PropertyInfo)member; MethodInfo info = myProperty.GetSetMethod(false); if (info != null) { object propertyValue = myProperty.GetValue(obj, null); if (propertyValue is ICloneable) {myProperty.SetValue(targetDeepCopyObj, (propertyValue as ICloneable).Clone(), null); } else {myProperty.SetValue(targetDeepCopyObj, Copy(propertyValue), null); } }} }}return targetDeepCopyObj; } }