• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

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

c# 搞代码 4年前 (2022-01-09) 13次浏览 已收录 0个评论

下面小编就为大家带来一篇C# 使用反射来实现对象的深度复制方法。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧

实现方式

通过挨个罗列的方式一次复制子对象是非常耗费人力的,如果子对象是引用类型,则还要需要考虑是否对子对象进一步深拷贝。

实际应用中,一个类如果有几十个子对象,挨个复制对于开发人员来说索然无味比较费时费力。

所以使用反射机制来实现。

但是如果是服务端运行的话,还是建议手动的实现。

毕竟反射机制比直接写出来的效率要慢一些。

代码:

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<em>本文来源[email protected]搞@^&代*@码)网5</em>.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#使用反射来实现对象的深度复制的示例代码分享的详细内容,更多请关注搞代码gaodaima其它相关文章!


搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:C#使用反射来实现对象的深度复制的示例代码分享

喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址