我在编写泛型深层复制方法时面临一个问题,该方法将类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;}
}
答案 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();
}
...
}