曾有人发帖要高效的对象拷贝通用方法,当时只给了一个简单类型的拷贝,现在挤出点时间完成了这个功能,内部的引用类型依次深度拷贝。
完整代码见博客:
http://blog.csdn.net/qldsrx/article/details/8265985
这里发帖收集建议意见,简单的测试了下,已经非常完美的运行了,目前能支持任何带无参数的构造函数的类的深拷贝,一元数组的深拷贝,数组和类的循环嵌套深拷贝(即父子关系的类,或双向链表)。
感兴趣的朋友,可以研究下Emit部分,这是C#的精华,也是能够提高效率的必备利器,嫌.NET慢的人不要光抱怨,那是因为你们不懂优化代码,会了Emit就可以最高限度的优化代码。
/// <summary>
/// 创建对象深度复制的副本
/// </summary>
public static T ToObjectCopy<T>(this T source) where T : class
/// <summary>
/// 将source对象的所有属性复制到target对象中,深度复制
/// </summary>
public static void ObjectCopyTo<T>(this T source, T target) where T : class
这2个方法原型是给外部调用的,使用起来很方便,也足够了。下面说下一个很常见的使用场合,那就是实体类的复制并修改,当我们要编辑集合中的某个实体对象的内容时,又怕改错了,想提供回滚功能,就可以用它将其复制一个副本出来。
虽然已经改过不少次了,但难免有BUG,欢迎提出宝贵意见。代码中的注释不多,没那么多时间完善,想学习的人可以对照MSDN慢慢看,这东西要消化很费脑细胞,慢慢琢磨吧。