实现方式

通过挨个罗列的方式一次复制子对象是非常耗费人力的,如果子对象是引用类型,则还要需要考虑是否对子对象进一步深拷贝。
实际应用中,一个类如果有几十个子对象,挨个复制对于开发人员来说索然无味比较费时费力。
所以使用反射机制来实现。
但是如果是服务端运行的话,还是建议手动的实现。
毕竟反射机制比直接写出来的效率要慢一些。
代码:
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;
}
}
以上这篇C# 使用反射来实现对象的深度复制方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持。
# C#
# 反射实现对象的深度复制
# C#表达式树Expression动态创建表达式
# C# 快速高效率复制对象(表达式树)
# C#使用表达式树实现对象复制的示例代码
# 给大家
# 来实现
# 希望能
# 索然无味
# 这篇
# 开发人员
# 小编
# 服务端
# 大家多多
# 实际应用
# IsValueType
# object
# Copy
# public
# static
# DeepCopyHelper
# Type
# targetDeepCopyObj
相关文章:
网站制作员失业,怎样查看自己网站的注册者?
如何在Golang中实现微服务服务拆分_Golang微服务拆分与接口管理方法
惠州网站建设制作推广,惠州市华视达文化传媒有限公司怎么样?
Android滚轮选择时间控件使用详解
高端建站三要素:定制模板、企业官网与响应式设计优化
如何选择长沙网站建站模板?H5响应式与品牌定制哪个更优?
如何在云主机快速搭建网站站点?
建站之星Pro快速搭建教程:模板选择与功能配置指南
怎么用手机制作网站链接,dw怎么把手机适应页面变成网页?
建站之星代理如何获取技术支持?
如何在建站之星绑定自定义域名?
Python lxml的etree和ElementTree有什么区别
广德云建站网站建设方案与建站流程优化指南
如何彻底卸载建站之星软件?
建站之星24小时客服电话如何获取?
如何在新浪SAE免费搭建个人博客?
制作网页的网站有哪些,电脑上怎么做网页?
SQL查询语句优化的实用方法总结
建站之星安装失败:服务器环境不兼容?
文字头像制作网站推荐软件,醒图能自动配文字吗?
香港服务器部署网站为何提示未备案?
制作宣传网站的软件,小红书可以宣传网站吗?
如何在Windows 2008云服务器安全搭建网站?
建站之星价格显示格式升级,你的预算足够吗?
已有域名如何快速搭建专属网站?
宁波免费建站如何选择可靠模板与平台?
商务网站制作工程师,从哪几个方面把握电子商务网站主页和页面的特色设计?
再谈Python中的字符串与字符编码(推荐)
建站之星logo尺寸如何设置最合适?
建站之星五站合一营销型网站搭建攻略,流量入口全覆盖优化指南
如何注册花生壳免费域名并搭建个人网站?
如何快速完成中国万网建站详细流程?
如何用PHP快速搭建CMS系统?
seo网站制作优化,网站SEO优化步骤有哪些?
阿里云网站搭建费用解析:服务器价格与建站成本优化指南
建站之星下载版如何获取与安装?
javascript基本数据类型及类型检测常用方法小结
如何在云虚拟主机上快速搭建个人网站?
,如何利用word制作宣传手册?
陕西网站制作公司有哪些,陕西凌云电器有限公司官网?
公司网站制作需要多少钱,找人做公司网站需要多少钱?
如何高效利用亚马逊云主机搭建企业网站?
魔毅自助建站系统:模板定制与SEO优化一键生成指南
外汇网站制作流程,如何在工商银行网站上做外汇买卖?
网站制作难吗安全吗,做一个网站需要多久时间?
宝塔面板如何快速创建新站点?
股票网站制作软件,网上股票怎么开户?
建站上市公司网站建设方案与SEO优化服务定制指南
网站制作专业公司有哪些,如何制作一个企业网站,建设网站的基本步骤有哪些?
*请认真填写需求信息,我们会在24小时内与您取得联系。