索引:
一.API 列表
.DeepClone()
用于 Model / Entity / ... ... 等引用类型对象的深度克隆
特性说明
1.不需要对对象做任何特殊处理,直接 .DeepClone() 即可得到该对象的深度克隆
2.不受对象层次深度限制,均可实现深度克隆(下面会给出几个简单示例 ... ...)
二.API 使用
1.命名空间,只需:
1 using MyDAL.ModelTools;
2.被深度克隆的对象只需是一个 class ,如下:
1 public class ModelEntity 2 { 3 public int ValueField { get; set; } 4 5 public string ReferenceField { get; set; } 6 7 public ModelEntity ObjectField { get; set; } 8 }
3.深度克隆 / 深度复制 示例
1 // 对象准备 2 var obj = new ModelEntity 3 { 4 ValueField = 10, 5 ReferenceField = "源值10", 6 ObjectField = new ModelEntity 7 { 8 ValueField = 11, 9 ReferenceField = "源值11", 10 ObjectField = new ModelEntity 11 { 12 ValueField = 12, 13 ReferenceField = "源值12" 14 } 15 } 16 }; 17 18 // 深度克隆 19 var cloneObj = obj.DeepClone(); 20 21 // 源对象 值展示 22 Console.WriteLine(obj.ValueField); // 10 23 Console.WriteLine(obj.ReferenceField); // 源值10 24 Console.WriteLine(obj.ObjectField.ValueField); // 11 25 Console.WriteLine(obj.ObjectField.ReferenceField); // 源值11 26 Console.WriteLine(obj.ObjectField.ObjectField.ValueField); // 12 27 Console.WriteLine(obj.ObjectField.ObjectField.ReferenceField); // 源值12 28 29 // 克隆对象 值展示 30 Console.WriteLine(cloneObj.ValueField); // 10 31 Console.WriteLine(cloneObj.ReferenceField); // 源值10 32 Console.WriteLine(cloneObj.ObjectField.ValueField); // 11 33 Console.WriteLine(cloneObj.ObjectField.ReferenceField); // 源值11 34 Console.WriteLine(cloneObj.ObjectField.ObjectField.ValueField); // 12 35 Console.WriteLine(cloneObj.ObjectField.ObjectField.ReferenceField); // 源值12 36 37 // 变更 克隆对象 的值 38 cloneObj.ReferenceField = "新值10"; 39 cloneObj.ObjectField.ReferenceField = "新值11"; 40 cloneObj.ObjectField.ObjectField.ReferenceField = "新值12"; 41 42 // 源对象 值展示 43 Console.WriteLine(obj.ValueField); // 10 44 Console.WriteLine(obj.ReferenceField); // 源值10 45 Console.WriteLine(obj.ObjectField.ValueField); // 11 46 Console.WriteLine(obj.ObjectField.ReferenceField); // 源值11 47 Console.WriteLine(obj.ObjectField.ObjectField.ValueField); // 12 48 Console.WriteLine(obj.ObjectField.ObjectField.ReferenceField); // 源值12 49 50 // 克隆对象 值展示 51 Console.WriteLine(cloneObj.ValueField); // 10 52 Console.WriteLine(cloneObj.ReferenceField); // 新值10 53 Console.WriteLine(cloneObj.ObjectField.ValueField); // 11 54 Console.WriteLine(cloneObj.ObjectField.ReferenceField); // 新值11 55 Console.WriteLine(cloneObj.ObjectField.ObjectField.ValueField); // 12 56 Console.WriteLine(cloneObj.ObjectField.ObjectField.ReferenceField); // 新值12
蒙
2019-03-09 15:22 周六