List<Object> 和深拷贝

Posted

技术标签:

【中文标题】List<Object> 和深拷贝【英文标题】:List<Object> and deep copy [duplicate] 【发布时间】:2018-10-05 06:19:10 【问题描述】:

我有一个具有值类型和一些 List&lt;Object&gt; 成员的类。该类实现了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&lt;IConable&gt; 而不是List&lt;Object&gt; 这解决了问题@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> 和深拷贝的主要内容,如果未能解决你的问题,请参考以下文章

浅拷贝和深拷贝

python-浅拷贝和深拷贝

Python学习-赋值浅copy和深copy

Object.assign () 和深拷贝

如何深拷贝 List<Object> [重复]

浅拷贝和深拷贝