1:利用反射实现

public T DeepCopy<T>(T obj)
        {
           object retval= Activator.CreateInstance(typeof(T));
            PropertyInfo[] pis = typeof(T).GetProperties();
            foreach (PropertyInfo pi in pis)
            {
                try{pi.SetValue(retval, pi.GetValue(obj, null), null);  }
                catch{  }
            }
            return (T)retval; 
        }

2:利用xml序列化和反序列化实现

public T DeepCopy<T>(T obj)
        {
            object retval;
            using (MemoryStream ms = new MemoryStream())
            {
                XmlSerializer xml = new XmlSerializer(typeof(T));
                xml.Serialize(ms, obj);
                ms.Seek(0, SeekOrigin.Begin);
                retval = xml.Deserialize(ms);
                ms.Close();
            }
            return (T)retval;
        }

3:利用二进制序列化和反序列化实现

public static T DeepCopy<t>(T obj)
{
    object retval;
    using (MemoryStream ms = new MemoryStream())
    {
        BinaryFormatter bf = new BinaryFormatter();
        //序列化成流
        bf.Serialize(ms, obj);
        ms.Seek(0, SeekOrigin.Begin);
        //反序列化成对象
        retval = bf.Deserialize(ms);
        ms.Close();
    }
    return (T)retval;
}

4:利用silverlight DataContractSerializer实现,用于在silverlight 客户端使用

public static T DeepCopy<T>(T obj)
        {
            object retval;
            using (MemoryStream ms = new MemoryStream())
            {
                DataContractSerializer ser = new DataContractSerializer(typeof(T));
                ser.WriteObject(ms, obj);
                ms.Seek(0, SeekOrigin.Begin);
                retval = ser.ReadObject(ms);
                ms.Close();
            }
            return (T)retval;
}

c# 深拷贝各种实现方式相关推荐

  1. JavaScript深拷贝之递归方式

    使用递归的方式进行对象(数组)的深拷贝 观看更加

  2. java深拷贝的三种方式

    问题:spring boot/JPA项目中,修改某个对象以后需要生成一个VO对象给客户端,数据库对应的POJO对象里有个Map类型的对象(名字叫para),这个对象的value又是个Map,我使用Ma ...

  3. 超级全面-深拷贝与浅拷贝的实现方式

    一.数据类型: (1)基本数据类型:number,string,Boolean,null,undefined,symbol(ES6),BigInt(ES10): (2)引用数据类型:对象,数组,函数等 ...

  4. Java浅拷贝和深拷贝的方式

    文章目录 1. 前言 2. 概念介绍 2.1 拷贝 / 克隆的概念 2.2 为什么需要拷贝方法? 2.3 什么是浅拷贝?浅拷贝和深拷贝的区别是什么? 3. 深拷贝的实现方式 3.1 手动深拷贝 3.2 ...

  5. clone是深拷贝还是浅拷贝_Cloneable接口的作用与探索理解浅拷贝与深拷贝

    导读:本文将主要讨论设计模式--原型模式中,关于cloneable接口及浅拷贝与深拷贝的概念. 原型模式的理解 关于原型模式的理解,我在网上发现一个有趣且助于理解原型模式的例子在这里分享一下:火影忍者 ...

  6. JS的深拷贝和浅拷贝

    今天,CVTE面试官问了深拷贝和浅拷贝的问题 我的回答是:浅拷贝是拷贝了对象的引用,当原对象发生变化的时候,拷贝对象也跟着变化:深拷贝是另外申请了一块内存,内容和原对象一样,更改原对象,拷贝对象不会发 ...

  7. 对深拷贝与浅拷贝的再次理解

    对深拷贝与浅拷贝的再次理解 记得11年底找工作的时候,面试时曾经遇到有面试官问的对深拷贝与浅拷贝的理解,那时候自己回来查了资料,写了篇博客,感觉自己理解了,其实理解的不深刻,最近在调试bug的时候,再 ...

  8. Map的putAll方法踩坑实记(对象深拷贝浅拷贝)

    文章目录 问题描述 编写测试代码模拟问题场景 场景1:Map中不包含对象 场景2:Map中包含对象 什么是对象的浅拷贝深拷贝 如何实现深拷贝 问题描述 在一个产品管理系统中,产品信息需要封装一份同步业 ...

  9. 深入浅出解释深拷贝、浅拷贝、对象拷贝、引用拷贝原理和应用

    拷贝总体上分为引用拷贝和对象拷贝. 1. 引用拷贝 创建一个指向对象的引用变量的拷贝. public class QuoteCopy {public static void main(String[] ...

最新文章

  1. mysql servicebroker_阿里云Kubernetes服务 - Service Broker快速入门指南
  2. Java 8 - Stream流骚操作解读
  3. java自动递增前缀式和后缀式区别
  4. Spring Boot-@EnableWebMvc注解
  5. 每天一个 liunx 命令 ls
  6. lightoj 1031 区间dp
  7. python --- 二分查找算法
  8. 2019蓝桥杯省赛---java---B---2(不同子串)
  9. C语言十进制转二进制
  10. 第四次c语言实验报告模板,C语言实验报告模板.doc
  11. Scala之集合Collection
  12. BroadLeaf项目搜索功能改进
  13. Choosing Capital for Treeland codeforce 219-D
  14. arXiv 上传文章过程
  15. Oracle数据库下载与安装(Windows)
  16. php连接 mysql的三种连接方式
  17. Xms Xmx PermSize MaxPermSize 区别
  18. React-笔记整理
  19. 平面解析几何----双曲线的硬解公式
  20. 电磁场与仿真软件(21)

热门文章

  1. hyperion高光谱参数_[ENVI] 珠海一号高光谱数据处理
  2. php随机获取一行文本,一行PHP随机字符串生成器?
  3. 自动匹配未认领订单编号_海量订单系统微服务开发:使用MongoDB支持海量数据...
  4. 原生ajax如何执行,原生ajax调用数据实例讲解
  5. 计算机跨考医学检验技术,医学检验技术考研可以考哪些专业?
  6. 今天的编程语言是怎么来的?
  7. 二极管为什么单向导电?
  8. mysql 更新索引_MySQL索引优化
  9. Java表示0到200的质因数_java记——循环 求一个数的所有质因数
  10. data transformation python_Python 编码为什么那么蛋疼?