通过复制构造函数与自定义对象列表进行深层复制

时间:2016-05-26 13:55:44

标签: c# oop deep-copy

我有自定义Rule对象的一些数据成员。一些整数,字符串,DateTimes,我在“复制构造函数”中处理了所有这些,您将在下面看到。我已经取代了数据成员的实际名称以保护隐私。

public class Rule
{
    private int someint1;
    private int someint2;
    private string string1;
    private string string2;
    private List<Rule> children;

    public Rule(Rule other)
    {
        other = (Rule)this.MemberwiseClone(); //Handles my integers and DateTimes.
        other.string1 = String.Copy(string1);
        other.string2 = String.Copy(string2);
        //Now handle List<Rule> children;-----------
    }
}

我的问题是因为我的Rule类中有一个具有递归性质的List。 (规则可能有其他规则......等等。)我如何处理该子列表的深层副本(子规则)?如果列表不为空,我是否需要预先循环并调用我的复制构造函数?

**不应该很重要,但我从Sql而不是在飞行结构中填充这些信息。

**编辑 标记为潜在重复的问题并未解决我在CustomObj类中具有List的问题。它解决了一个不属于自己类型的类中的List,因此我认为这个问题值得一个不重复的单独问题。

1 个答案:

答案 0 :(得分:0)

public class Rule
{
    private int someint1;
    private int someint2;
    private string string1;
    private string string2;
    private List<Rule> children;

    public Rule()
    {

    }

    public Rule(Rule other)
    {
        other = (Rule)this.MemberwiseClone(); //Handles my integers and DateTimes.
        other.string1 = String.Copy(string1);
        other.string2 = String.Copy(string2);
        other.children = children.Select(x => x.clone()).ToList();

    }
    public Rule clone()
    {
        Rule clone = new Rule();

        clone.children = this.children;

        return clone;

    }
}