• 利用序列化的方式实现C#深复制和浅复制


    代码如下:具体看注释

       [Serializable]
        public class A
        {
            public virtual string Name { get; set; }
            public int Age { get; set; }
    
        }
    
    
       class Program
        {
            static void Main(string[] args)
            { 
                ShallowCopyTest(); 
           DeepCopyTest();
        }
    
          // 利用序列化和反序列化的方式
            public static T DeepClone<T>(T obj)
            {
                using (var ms = new MemoryStream())
                {
                    var formatter = new BinaryFormatter();
                    formatter.Serialize(ms, obj);
                    ms.Position = 0;
                    return (T)formatter.Deserialize(ms);
                }
            }
            // 深复制
            public static void DeepCopyTest()
            {
                List<A> a = new List<A>();
                a.Add(new A { Age = 1, Name = "1" });
                a.Add(new A { Age = 2, Name = "2" });
                List<A> a1 = new List<A>();
                a.ForEach((item) =>
                {
                    a1.Add(DeepClone<A>(item));
                });
                a1[0].Age = 10; //a[0]的Age不会受影响
                Console.WriteLine(a[0].Age);
                Console.ReadKey();
            }
            // 浅复制
            public static void ShallowCopyTest()
            {
                List<A> a = new List<A>();
                a.Add(new A { Age = 1, Name = "1" });
                a.Add(new A { Age = 2, Name = "2" });
                List<A> a1 = new List<A>();
                a.ForEach((item) => { a1.Add(item); });
                a.ForEach((item) => { a1.Add(item); }); // 列表项的内存地址只有一份
                a1[0].Age = 3; // a[0]的Age也会变成3
                Console.WriteLine(a[0].Age);
                Console.ReadKey();
            }    
    }
  • 相关阅读:
    程序猿节日快乐!
    Haxe UI框架StablexUI的使用备忘与心得(一)
    sudo fdisk -l
    Win7下硬盘安装fedora17
    盎司
    arm-linux工具
    GSM900TCP/UDP连接
    STC51几种简单的延时函数
    STC51六中中断配置点亮一个LED
    LCD1602小程序
  • 原文地址:https://www.cnblogs.com/tonge/p/4891289.html
Copyright © 2020-2023  润新知