zoukankan      html  css  js  c++  java
  • c# 实现深层复制的3中方法

    1:利用反射实现

    public static T DeepCopy<T>(T obj)
    {
      //如果是字符串或值类型则直接返回
      if (obj is string || obj.GetType().IsValueType) return obj;
     
      object retval = Activator.CreateInstance(obj.GetType());
      FieldInfo[] fields = obj.GetType().GetFields(BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.Static);
      foreach (FieldInfo field in fields)
      {
        try { field.SetValue(retval, DeepCopy(field.GetValue(obj))); }
        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;
    }
     
       
    You can reach me by surfing the web ---- huntjobs.cn,or sending e-mails to me,Here is my qq MailBox:1424870395@qq.com
  • 相关阅读:
    7-31 jmu-分段函数l (20 分)
    7-29 jmu-python-不同进制数 (10 分)
    7-28 摄氏温度转换华氏温度 (5 分)
    7-23 图的字典表示 (20 分)
    7-24 判断素数 (20 分)
    7-22 输出10个不重复的英文字母 (50 分)
    【转载】C#批量插入数据到Sqlserver中的三种方式
    天气预报api-汇总
    【转载】VS2015 + EF6连接MYSQL5.6
    【转摘】TFS上分支和标签的用法
  • 原文地址:https://www.cnblogs.com/HedgehogBlog/p/6071089.html
Copyright © 2011-2022 走看看