索引:

目录索引

一.API 列表

  .DeepClone()

    用于 Model / Entity / ... ... 等引用类型对象的深度克隆

  特性说明

    1.不需要对对象做任何特殊处理,直接 .DeepClone() 即可得到该对象的深度克隆

    2.不受对象层次深度限制,均可实现深度克隆(下面会给出几个简单示例 ... ...)

二.API 使用

  1.命名空间,只需:

 using MyDAL.ModelTools;

  2.被深度克隆的对象只需是一个 class ,如下:

     public class ModelEntity
{
public int ValueField { get; set; } public string ReferenceField { get; set; } public ModelEntity ObjectField { get; set; }
}

  3.深度克隆 / 深度复制 示例

             // 对象准备
var obj = new ModelEntity
{
ValueField = ,
ReferenceField = "源值10",
ObjectField = new ModelEntity
{
ValueField = ,
ReferenceField = "源值11",
ObjectField = new ModelEntity
{
ValueField = ,
ReferenceField = "源值12"
}
}
}; // 深度克隆
var cloneObj = obj.DeepClone(); // 源对象 值展示
Console.WriteLine(obj.ValueField); //
Console.WriteLine(obj.ReferenceField); // 源值10
Console.WriteLine(obj.ObjectField.ValueField); //
Console.WriteLine(obj.ObjectField.ReferenceField); // 源值11
Console.WriteLine(obj.ObjectField.ObjectField.ValueField); //
Console.WriteLine(obj.ObjectField.ObjectField.ReferenceField); // 源值12 // 克隆对象 值展示
Console.WriteLine(cloneObj.ValueField); //
Console.WriteLine(cloneObj.ReferenceField); // 源值10
Console.WriteLine(cloneObj.ObjectField.ValueField); //
Console.WriteLine(cloneObj.ObjectField.ReferenceField); // 源值11
Console.WriteLine(cloneObj.ObjectField.ObjectField.ValueField); //
Console.WriteLine(cloneObj.ObjectField.ObjectField.ReferenceField); // 源值12 // 变更 克隆对象 的值
cloneObj.ReferenceField = "新值10";
cloneObj.ObjectField.ReferenceField = "新值11";
cloneObj.ObjectField.ObjectField.ReferenceField = "新值12"; // 源对象 值展示
Console.WriteLine(obj.ValueField); //
Console.WriteLine(obj.ReferenceField); // 源值10
Console.WriteLine(obj.ObjectField.ValueField); //
Console.WriteLine(obj.ObjectField.ReferenceField); // 源值11
Console.WriteLine(obj.ObjectField.ObjectField.ValueField); //
Console.WriteLine(obj.ObjectField.ObjectField.ReferenceField); // 源值12 // 克隆对象 值展示
Console.WriteLine(cloneObj.ValueField); //
Console.WriteLine(cloneObj.ReferenceField); // 新值10
Console.WriteLine(cloneObj.ObjectField.ValueField); //
Console.WriteLine(cloneObj.ObjectField.ReferenceField); // 新值11
Console.WriteLine(cloneObj.ObjectField.ObjectField.ValueField); //
Console.WriteLine(cloneObj.ObjectField.ObjectField.ReferenceField); // 新值12

                                         蒙

                                    2019-03-09 15:22 周六

MyDAL - 引用类型对象 .DeepClone() 深度克隆[深度复制] 工具 使用的更多相关文章

  1. js对象简单、深度克隆(复制)

    javascript的一切实例都是对象,只是对象之间稍有不同,分为原始类型和合成类型.原始类型对象指的是字符串(String).数值(Number).布尔值(Boolean),合成类型对象指的是数组( ...

  2. javascript中对象的深度克隆

    记录一个常见的面试题,javascript中对象的深度克隆,转载自:http://www.2cto.com/kf/201409/332955.html 今天就聊一下一个常见的笔试.面试题,js中对象的 ...

  3. javascript对象的深度克隆

    在做项目的时候需要向对象里面添加新属性,又不想修改原对象.于是就写: var newObj = oldObj,但是新对象属性改变后就对象也会跟着改变,这是因为无论是新对象还是旧对象,指向的内存地址都是 ...

  4. js之深度克隆、简易克隆

    一.js中的对象 谈到对象的克隆,必定要说一下对象的概念. js中的数据类型分为两大类:原始类型和对象类型. (1)原始类型包括:数值.字符串.布尔值.null.undefined(后两个是特殊的原始 ...

  5. 如何复制一个java对象(浅克隆与深度克隆)

    在项目中,有时候有一些比较重要的对象经常被当作参数传来传去,和C语言的值传递不同,java语言的传递都是引用传递,在任何一个地方修改了这个对象的值,就会导致这个对象在内存中的值被彻底改变.但是很多时候 ...

  6. js实现数组、对象深度克隆的两种办法

    1.深度克隆的原理 JS中的深度克隆,指的是原对象改变了,克隆出来的新对象也不会改变,原对象与新对象是完全独立的关系. 实现深度克隆的原理得从对象是一种引用类型说起 众所周知,对象是一种引用类型,对象 ...

  7. C#对象深度克隆

    有基础的开发者都应该很明白,对象是一个引用类型,例如: object b=new object(); object a=b; 那么a指向的是b的地址,这样在有些时候就会造成如果修改a的值,那么b的值也 ...

  8. java中传值及引伸深度克隆的思考(说白了Java只能传递对象指针)

    java中传值及引伸深度克隆的思考 大家都知道java中没有指针.难道java真的没有指针吗?句柄是什么?变量地址在哪里?没有地址的话简直不可想象! java中内存的分配方式有两种,一种是在堆中分配, ...

  9. java对象 深度克隆(不实现Cloneable接口)和浅度克隆

    详见:http://blog.yemou.net/article/query/info/tytfjhfascvhzxcyt128 为什么需要克隆: 在实际编程过程中,我们常常要遇到这种情况:有一个对象 ...

随机推荐

  1. 访问者模式 Visitor 行为型 设计模式(二十七)

    访问者模式 Visitor    <侠客行>是当代作家金庸创作的长篇武侠小说,新版电视剧<侠客行>中,开篇有一段独白:  “茫茫海外,传说有座侠客岛,岛上赏善罚恶二使,每隔十年 ...

  2. openlayers4 入门开发系列之聚合图篇(附源码下载)

    前言 openlayers4 官网的 api 文档介绍地址 openlayers4 api,里面详细的介绍 openlayers4 各个类的介绍,还有就是在线例子:openlayers4 官网在线例子 ...

  3. Odoo开源ERP:功能模块操作-销售功能篇

    客户基础资料 1. 所有的客户基础资料,智云ERP开账启用时,期初的客户数据如果大于200条,可以批量导入: 2. 点“销售/订单/客户”菜单可以查看.编辑修改.搜索所有的客户基础资料: 3. 多层级 ...

  4. Apache Flink 介绍

    原文地址:https://mp.weixin.qq.com/s?__biz=MzU2Njg5Nzk0NQ==&mid=2247483660&idx=1&sn=ecf01cfc8 ...

  5. SQL Server 创建跨库查詢、修改、增加、删除

    一.通过SQL语句访问远程数据库   --OPENROWSET函数 使用OPENROWSET()是个不错的选择,也可以用做跨库查询包括增.删.改.查 下面就来介绍一下OPENROWSET函数的运用 包 ...

  6. Luogu P5279 [ZJOI2019]麻将

    ZJOI2019神题,间接送我退役的神题233 考场上由于T2写挂去写爆搜的时候已经没多少时间了,所以就写挂了233 这里不多废话直接开始讲正解吧,我们把算法分成两部分 1.建一个"胡牌自动 ...

  7. ReactNative之参照具体示例来看RN中的FlexBox布局

    今天是重阳节,祝大家节日快乐,今天继续更新RN相关的博客.上篇博客<ReactNative之从HelloWorld中看环境搭建.组件封装.Props及State>中我们通过一个HelloW ...

  8. 解决 Mac launchpad 启动台 Gitter 图标无法删除的问题

    Mac 删除应用非常简单,将应用拖到回收站就删除了.或者进入应用程序文件夹,选中程序,command + delete 就删除了应用,这也是删除文件的快捷键. 但是,安装 Gitter 后,删除了应用 ...

  9. .NET Core TDD 前传: 编写易于测试的代码 -- 缝

    有时候不是我们不想做单元测试, 而是这代码写的实在是没法测试.... 举个例子, 如果一辆汽车在产出后没完成测试, 那么没人敢去驾驶它. 代码也是一样的, 如果项目未能进行该做的测试, 那么客户就不敢 ...

  10. 混淆矩阵、准确率、精确率/查准率、召回率/查全率、F1值、ROC曲线的AUC值

    准确率.精确率(查准率).召回率(查全率).F1值.ROC曲线的AUC值,都可以作为评价一个机器学习模型好坏的指标(evaluation metrics),而这些评价指标直接或间接都与混淆矩阵有关,前 ...