如何克隆列表对象

时间:2014-07-09 05:45:59

标签: c# asp.net cloning

您好我正在尝试克隆一个有成员列表对象的对象

 public class GrossTemplatesInfo
{
    public List<GrossTemplates> grossTemplates { get; set; }
    public object Clone()
    {
        GrossTemplatesInfo other = (GrossTemplatesInfo)this.MemberwiseClone();
        other.grossTemplates = new List<GrossTemplates>(grossTemplates);
        return other;
    }
}
public class GrossTemplates : ICloneable
{
    public string tempID { get; set; }
    public string PreferenceName { get; set; }
    public string PreferenceValue { get; set; }
    public bool isDefault { get; set; } 
    object ICloneable.Clone()
    {
        return this.Clone();
    }
    public object Clone()
    {
        return this.MemberwiseClone();
    }

}

我的方法是这样的

public static GrossTemplatesInfo LoadInitialdata(string caseType)
    {
        GrossTemplatesInfo a = new GrossTemplatesInfo();
       GrossTemplatesInfo b = a.Clone() as GrossTemplatesInfo; 
    }

我已经这样做了,我没有得到克隆对象中的值&#39; b&#39;这是在原始对象&#39; a&#39;。任何帮助?我对这种克隆机制有点新意。

1 个答案:

答案 0 :(得分:0)

您想克隆容器类,因此您也需要在其上实现ICloneable(GrossTemplatesInfo)。

处理GrossTemplates类,有三种可能性:

1,手动完成:

public object Clone()
{
    return new GrossTemplates()
    {
        tempId = this.tempId,
        PreferenceName = this.PreferenceName,
        PreferenceValue = this.PreferenceValue,
        IsDefault = this.IsDefault
    };
}

2,使用通用助手作为描述here(参见@Uriil评论)

3,重新思考整个背景(或向我们解释)和do not copy instances

如果适用,3是可行的方法。