C#中的通用深层复制用于用户定义的类

时间:2014-04-16 05:40:57

标签: c# .net generics deep-copy

我在编写泛型深层复制方法时面临一个问题,该方法将类1复制到具有不同命名空间的相同结构的类2。在网上搜索后,我能够在一个映射级别进行,但问题是如果属性是指其他用户定义的类如何进行递归深层复制。下面是更清晰的示例类:从下面的示例我尝试将Namespace1.class1复制到Namespace2.Class1(Class1,GenderType,Subject存在于NameSpace1和NameSpace2中)。

Namespace1.Student
{

 String Name {get;set;}
 Int Age {get;set;} 
 List<Subject> lstSubjects {get;set;} //Here we need recursive copy.
 GenderType gender {get;set;}
} 

Enum GenderType
{
  Male,
  Female
}

NameSpace1.Subject
{
   string subjectName {get;set;}
   string lecturereName {get;set;}
}

1 个答案:

答案 0 :(得分:0)

尝试为每个类使用复制构造函数,可以克隆所有字段。您可能还想引入一个界面,例如名为IDeepCloneable,强制类实现调用复制构造函数的方法DeepClone()。要在不进行强制转换的情况下获得克隆类型安全,可以使用自引用结构。

看看以下内容:

interface IDeepCloneable<out T>
{
    T DeepClone();
}

class SomeClass<T> : IDeepCloneable<T> where T : SomeClass<T>, new()
{        
    // copy constructor
    protected SomeClass(SomeClass<T> source)
    {
        // copy members 
        x = source.x;
        y = source.y;
        ...
   }

    // implement the interface, subclasses overwrite this method to
    // call 'their' copy-constructor > because the parameter T refers
    // to the class itself, this will get you type-safe cloning when
    // calling 'anInstance.DeepClone()'
    public virtual T DeepClone()
    {
        // call copy constructor
        return new T();
    }

    ...
}