博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
c#深拷贝的一个方法
阅读量:6655 次
发布时间:2019-06-25

本文共 1479 字,大约阅读时间需要 4 分钟。

使用ef,有时候会遇到,要对一个对象进行拷贝复制,可是一般的方法,拷贝后会提示此对象的实例在上下文的 entitystate已经存在,就需要用一种拷贝。 简单的拷贝只拷贝了值类型,对引用类型的拷贝需要使用递归,依次循环到底。 public object Copy(object obj) {             Object targetDeepCopyObj; try { 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; } catch (Exception e) { } return null; }

转载于:https://www.cnblogs.com/hualiu0/p/4546316.html

你可能感兴趣的文章
Android 资源保护问题——探索
查看>>
修改!important定义的样式(2)
查看>>
mac下PHP安装mongo扩展
查看>>
腾讯前端面试
查看>>
C++STL之algorithm(一)
查看>>
bzoj千题计划211:bzoj1996: [Hnoi2010]chorus 合唱队
查看>>
bzoj千题计划321:bzoj5251: [2018多省省队联测]劈配(网络流 + 二分)
查看>>
PHP通过串口发短信
查看>>
Objective-C数组和字典
查看>>
mysql登录基本语句
查看>>
废掉一个人最隐蔽的方式,是让他忙到没时间成长(转)
查看>>
二维数组的遍历
查看>>
页面布局(5)——三栏自适应布局(左右定宽中间自适应)
查看>>
【集成学习】sklearn中xgboost模块的XGBClassifier函数
查看>>
装系统遇到的那些问题
查看>>
修改文件
查看>>
成为七牛云 Contributor -如何贡献 logkit 代码
查看>>
apt-get upgarde 和dist-upgrade的差别
查看>>
Difference Between Arraylist And Vector : Core Java Interview Collection Question
查看>>
如何成为“10倍效率”开发者
查看>>