【发布时间】:2020-01-29 23:22:34
【问题描述】:
所以我想为我的类 EmployeeNodeClass 创建一个构造函数,它接受 EmployeeNodeClass 对象并使用 deepclone 函数复制它:
public static T DeepClone<T>(T obj)
{
using (var ms = new MemoryStream())
{
var formatter = new BinaryFormatter();
formatter.Serialize(ms, obj);
ms.Position = 0;
return (T)formatter.Deserialize(ms);
}
}
到新对象。
一开始我以为就这么简单
public EmployeeNodeClass(EmployeeNodeClass EMPND)
{
this = DeepClone(EMPND);
}
但后来我收到this 是只读的错误。
那我该怎么做呢?
【问题讨论】:
-
如果你的类型有引用类型成员,那么不会保证深度克隆。
-
ThisEmployee成员的声明是什么? -
@OlivierRogier 对不起,错误的构造函数。编辑它
-
@AvivVetaro .Net 中内置了 nothing 来保证复杂类型的简单深层克隆。您必须知道您的类型并复制这些字段。
IClonable是为了帮助解决这个问题,但在实践中失败了。 -
不要使用构造函数。创建一个返回 T 的静态方法。
标签: c# generics types constructor clone