如何在C#中克隆一个通用的列表?
如何在C#中克隆一个通用的列表?
我在C#中有一个泛型对象列表,并希望克隆该列表。列表中的项目是可克隆的,但似乎没有一个选项可以执行list.Clone()
。
是否有简单的方法解决这个问题?
admin 更改状态以发布 2023年5月24日
如果你的元素是值类型,那么你可以这样做:
ListnewList = new List (oldList);
然而,如果它们是引用类型,并且你想要一个深度拷贝(假设你的元素正确实现了ICloneable
接口),那么你可以这样做:
ListoldList = new List (); List newList = new List (oldList.Count); oldList.ForEach((item) => { newList.Add((ICloneable)item.Clone()); });
显然,在上面的泛型中替换ICloneable
和转换为你的元素类型实现ICloneable
。
如果你的元素类型不支持ICloneable
,但拥有一个拷贝构造函数,那么你可以这样做:
ListoldList = new List (); List newList = new List (oldList.Count); oldList.ForEach((item)=> { newList.Add(new YourType(item)); });
个人而言,我会避免使用ICloneable
,因为需要确保所有成员的深度拷贝。相反,我建议使用拷贝构造函数或类似YourType.CopyFrom(YourType itemToCopy)
的工厂方法来返回一个新的YourType
实例。
任何这些选项都可以由方法(扩展或否则)包装起来。