国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > C# > 正文

C# List引用類型克隆的3種方法

2020-01-24 00:10:44
字體:
供稿:網(wǎng)友

前言

有時(shí)候我們想克隆一個(gè)List去做別的事,而不影響原來的List,我們直接在list后面加上小點(diǎn)點(diǎn),發(fā)現(xiàn)并沒有Clone這樣的擴(kuò)展函數(shù)。這時(shí)候就只有自己擴(kuò)展了。

嘗試了三種方式,測試都通過了,至于性能方面我還沒有做測試。

下面話不多說了,來一起看看詳細(xì)的介紹吧

一、反射

public static List<T> Clone<T>(this List<T> list) where T : new()  {   List<T> items = new List<T>();   foreach (var m in list)   {    var model = new T();    var ps = model.GetType().GetProperties();    var properties = m.GetType().GetProperties();    foreach (var p in properties)    {     foreach (var pm in ps)     {      if (pm.Name == p.Name)      {       pm.SetValue(model, p.GetValue(m));      }     }    }    items.Add(model);   }   return items;  }

二、序列化(依賴Newtonsoft.Json)

 public static List<T> Clone<T>(this List<T> list) where T : new() { var str = JsonConvert.SerializeObject(list); return JsonConvert.DeserializeObject<List<T>>(str); }

三、序列化(BinaryFormatter)

public static List<T> Clone<T>(this List<T> list)  {   using (Stream objectStream = new MemoryStream())   {    IFormatter formatter = new BinaryFormatter();    formatter.Serialize(objectStream, list);    objectStream.Seek(0, SeekOrigin.Begin);    return (List<T>)formatter.Deserialize(objectStream);   }  }

測試

private void Test(){ List<NormalSetting> list = new List<NormalSetting>(); list.Add(new NormalSetting { RedisIp = "123" }); List<NormalSetting> items = list.Clone(); list[0].RedisIp = "456"; logMessager.Show("{0}:{1}", list[0].RedisIp, items[0].RedisIp);}

注意事項(xiàng):

第一種方式無需任何依賴。

第二種方式需要Newtonsoft.Json,如果項(xiàng)目中沒有用到它,不推薦使用這種方式。

第三種方式序要給引用類型實(shí)體加上[Serializable]特性

總結(jié)

以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,如果有疑問大家可以留言交流,謝謝大家對(duì)武林網(wǎng)的支持。

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 绥中县| 资溪县| 嘉荫县| 抚宁县| 平安县| 晴隆县| 图们市| 商河县| 延庆县| 青浦区| 静海县| 平安县| 信阳市| 沙坪坝区| 会宁县| 轮台县| 汕头市| 海阳市| 临泉县| 巴彦淖尔市| 诸暨市| 大田县| 屯门区| 海城市| 翼城县| 保靖县| 阜康市| 麦盖提县| 东乌珠穆沁旗| 介休市| 靖州| 南岸区| 德阳市| 襄城县| 巴彦县| 特克斯县| 山东省| 阳江市| 高清| 麟游县| 汉沽区|