這篇文章將為大家詳細(xì)講解有關(guān)如何在C#中使用List引用類型,文章內(nèi)容質(zhì)量較高,因此小編分享給大家做個參考,希望大家閱讀完這篇文章后對相關(guān)知識有一定的了解。
10年積累的成都網(wǎng)站設(shè)計、網(wǎng)站建設(shè)經(jīng)驗,可以快速應(yīng)對客戶對網(wǎng)站的新想法和需求。提供各種問題對應(yīng)的解決方案。讓選擇我們的客戶得到更好、更有力的網(wǎng)絡(luò)服務(wù)。我雖然不認(rèn)識你,你也不認(rèn)識我。但先網(wǎng)站制作后付款的網(wǎng)站建設(shè)流程,更有法庫免費網(wǎng)站建設(shè)讓你可以放心的選擇與我們合作。
一、反射
public static ListClone (this List list) where T : new() { List items = new List (); 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 ListClone (this List list) where T : new() { var str = JsonConvert.SerializeObject(list); return JsonConvert.DeserializeObject >(str); }
三、序列化(BinaryFormatter)
public static ListClone (this List list) { using (Stream objectStream = new MemoryStream()) { IFormatter formatter = new BinaryFormatter(); formatter.Serialize(objectStream, list); objectStream.Seek(0, SeekOrigin.Begin); return (List )formatter.Deserialize(objectStream); } }
測試
private void Test() { Listlist = new List (); list.Add(new NormalSetting { redisIp = "123" }); List items = list.Clone(); list[0].RedisIp = "456"; logMessager.Show("{0}:{1}", list[0].RedisIp, items[0].RedisIp); }
注意事項:
第一種方式無需任何依賴。
第二種方式需要Newtonsoft.Json,如果項目中沒有用到它,不推薦使用這種方式。
第三種方式序要給引用類型實體加上[Serializable]特性
關(guān)于如何在C#中使用List引用類型就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,可以學(xué)到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。