大橙子网站建设,新征程启航
为企业提供网站建设、域名注册、服务器等服务
这篇文章将为大家详细讲解有关如何在C#中使用List引用类型,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。
10年积累的成都网站设计、网站建设经验,可以快速应对客户对网站的新想法和需求。提供各种问题对应的解决方案。让选择我们的客户得到更好、更有力的网络服务。我虽然不认识你,你也不认识我。但先网站制作后付款的网站建设流程,更有法库免费网站建设让你可以放心的选择与我们合作。
一、反射
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]特性
关于如何在C#中使用List引用类型就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。