List<Object> 和深拷贝
Posted
技术标签:
【中文标题】List<Object> 和深拷贝【英文标题】:List<Object> and deep copy [duplicate] 【发布时间】:2018-10-05 06:19:10 【问题描述】:我有一个具有值类型和一些 List<Object>
成员的类。该类实现了IClonable
接口,实现了Clone()
和GetHashCode()
。在Clone()
方法中,我使用MemberwiseClone()
方法克隆值类型。
我也在Object
(我们称之为Person
)类中进行了相同的编码。我想在引用类的Clone()
方法中调用该类的Clone()
方法。但是由于这里类的类型是Object
,我不能调用它的Clone()
方法。
我不能在这里将Object
转换为Person
,因为Object
的类型在运行时会发生变化。例如,有时是“人”有时是“订单”。
这里是示例代码:
public class Person : IClonable
public string name = "Name";
public string surname = "Surname";
public override Person Clone()
Person p = this.MemberwiseClone();
public class Order : IClonable
public string name = "OrderName";
public int orderId = 1;
public override Order Clone()
Person p = this.MemberwiseClone();
public class List : IClonable
public string listname = "ListName";
List<object> objectList = new List<object>();
public override List Clone()
List l = this.MemberwiseClone(); //This clones value types
List<object> copyObjectList = new List(object);
foreach(Object o in objectList)
Object co = o.Clone(); //I want something like this
copyObjectList.Add(co);
l.objectList = copyObjectList;
return l;
【问题讨论】:
可能是List<IConable>
而不是List<Object>
。
这解决了问题@JoelCoehoorn,谢谢:)
【参考方案1】:
不确定我是否完全理解您的问题...但是您是否在追求这样的事情?
List<Object> objects = GetListOfObjects();
foreach(var obj in objects)
if ((var cloneMeQuick = obj as IClonable)) //or `obj as Person` if you only want to go deep on person objects
yield return cloneMeQuick.Clone();
【讨论】:
以上是关于List<Object> 和深拷贝的主要内容,如果未能解决你的问题,请参考以下文章