zoukankan      html  css  js  c++  java
  • 利用序列化的方式实现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();
            }    
    }
  • 相关阅读:
    miniNExT
    使用ExaBGP发送BGP路由信息和清洗DDoS流量
    HTML day02(html列表与菜单的制作)
    HTML day01基础总结
    SSH项目整合基本步骤
    常见异常类有哪些?
    JSP 生命周期
    HTTP状态码
    使用oracle删除表中重复记录
    Oracle三种分页?
  • 原文地址:https://www.cnblogs.com/tonge/p/4891289.html
Copyright © 2011-2022 走看看