1. <strong id="7actg"></strong>
    2. <table id="7actg"></table>

    3. <address id="7actg"></address>
      <address id="7actg"></address>
      1. <object id="7actg"><tt id="7actg"></tt></object>

        C#中4種深拷貝方法介紹

        共 2113字,需瀏覽 5分鐘

         ·

        2021-05-07 06:55

        概述

         為什么要用到深拷貝呢?比如我們建了某個類Person,并且實例化出一個對象,然后,突然需要把這個對象復制一遍,并且復制出來的對象要跟之前的一模一樣,來看下我們一般會怎么做。

        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;}

        4、DataContractSerializer實現

        利用silverlight DataContractSerializer實現,用于在silverlight 客戶端使用

        public static T DeepCopy<T>(T obj)    {      object retval;      using (MemoryStream ms = new MemoryStream())      {        DataContractSerializer ser = new DataContractSerializer(typeof(T));        ser.WriteObject(ms, obj);        ms.Seek(0, SeekOrigin.Begin);        retval = ser.ReadObject(ms);        ms.Close();      }      return (T)retval;



        往期精彩回顧




        【推薦】.NET Core開發(fā)實戰(zhàn)視頻課程 ★★★

        .NET Core實戰(zhàn)項目之CMS 第一章 入門篇-開篇及總體規(guī)劃

        【.NET Core微服務實戰(zhàn)-統(tǒng)一身份認證】開篇及目錄索引

        Redis基本使用及百億數據量中的使用技巧分享(附視頻地址及觀看指南)

        .NET Core中的一個接口多種實現的依賴注入與動態(tài)選擇看這篇就夠了

        10個小技巧助您寫出高性能的ASP.NET Core代碼

        用abp vNext快速開發(fā)Quartz.NET定時任務管理界面

        在ASP.NET Core中創(chuàng)建基于Quartz.NET托管服務輕松實現作業(yè)調度

        現身說法:實際業(yè)務出發(fā)分析百億數據量下的多表查詢優(yōu)化

        關于C#異步編程你應該了解的幾點建議

        C#異步編程看這篇就夠了


        瀏覽 47
        點贊
        評論
        收藏
        分享

        手機掃一掃分享

        分享
        舉報
        評論
        圖片
        表情
        推薦
        點贊
        評論
        收藏
        分享

        手機掃一掃分享

        分享
        舉報
        1. <strong id="7actg"></strong>
        2. <table id="7actg"></table>

        3. <address id="7actg"></address>
          <address id="7actg"></address>
          1. <object id="7actg"><tt id="7actg"></tt></object>
            99精品欧美一区二区蜜桃免费 | 日韩色情一区二区三区 | 亚洲无码51 | 黄色一级片在线看 | 激情性爱五月天 | 久久日韩精品 | 影音先锋一二三区 | 国产精品99久久久久久久久久 | 韩国一区二区三区视频 | 偷拍综合 |