1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > C#使用反射来实现对象的深度复制的示例代码分享

C#使用反射来实现对象的深度复制的示例代码分享

时间:2021-11-16 19:10:56

相关推荐

C#使用反射来实现对象的深度复制的示例代码分享

后端开发|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; } }

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。