C# 从同一类型获取对象的构造函数
因此,我想为我的类C# 从同一类型获取对象的构造函数,c#,generics,types,constructor,clone,C#,Generics,Types,Constructor,Clone,因此,我想为我的类EmployeeNodeClass创建构造函数,它接受EmployeeNodeClass对象,并使用deepclone函数复制它: publicstatict-DeepClone(T-obj) { 使用(var ms=new MemoryStream()) { var formatter=新的二进制格式化程序(); 序列化(ms,obj); ms.Position=0; 返回(T)格式化程序。反序列化(ms); } } 到新对象 起初,我认为这很简单 public Emplo
EmployeeNodeClass
创建构造函数,它接受EmployeeNodeClass
对象,并使用deepclone函数复制它:
publicstatict-DeepClone(T-obj)
{
使用(var ms=new MemoryStream())
{
var formatter=新的二进制格式化程序();
序列化(ms,obj);
ms.Position=0;
返回(T)格式化程序。反序列化(ms);
}
}
到新对象
起初,我认为这很简单
public EmployeeNodeClass(EmployeeNodeClass EMPND)
{
这=深度克隆(EMPND);
}
但是我得到了一个错误,这个
是只读的
那么我该怎么做呢?可以使用NewtonSoft JsonConvert.PopulateObject: 例如:
class Entity
{
public List<int> List { get; set; }
public Entity(List<int> list)
{
List = list;
}
public Entity(Entity original)
{
string originalJson = JsonConvert.SerializeObject(original);
JsonConvert.PopulateObject(originalJson, this);
}
}
类实体
{
公共列表{get;set;}
公共实体(列表)
{
列表=列表;
}
公共实体(实体原件)
{
string originalJson=JsonConvert.SerializeObject(原始);
PopulateObject(原始JSON,this);
}
}
使用它:
static void Main(string[] args)
{
var entity1 = new Entity(new List<int> { 1, 2, 3 });
var entity2 = new Entity(entity1);
entity1.List[0] = 5;
Console.WriteLine(entity2.List[0]);
}
static void Main(字符串[]args)
{
var entity1=新实体(新列表{1,2,3});
var entity2=新实体(entity1);
entity1.列表[0]=5;
Console.WriteLine(entity2.List[0]);
}
注意:因为它使用NewtonSoft Json,所以它只克隆公共的可写属性。因此,私有字段(与此类属性不关联)中的内部状态将丢失。如果您的类型具有引用类型成员,则这样序列化将不能保证深度克隆。
ThisEmployee
成员的声明是什么?@OlivierRogier抱歉,构造错误。编辑it@AvivVetaroNet中没有任何东西可以保证复杂类型的简单深度克隆。您必须知道您的类型并复制字段IClonable
本打算帮助实现这一点,但在实践中失败了。不要使用构造函数。创建一个返回T的静态方法。