从同一类型获取对象的构造函数
A constructor that takes object from same type
所以我想为我的 class EmployeeNodeClass
创建构造函数,它接收 In EmployeeNodeClass
对象并使用深度克隆函数复制它:
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
是只读的错误。
那我该怎么做呢?
可以使用 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);
}
}
并使用它:
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]);
}
注意:因为这使用了 NewtonSoft Json,它只会克隆 public,可写属性。因此,私有字段(与此类属性无关)中的内部状态将丢失。
所以我想为我的 class EmployeeNodeClass
创建构造函数,它接收 In EmployeeNodeClass
对象并使用深度克隆函数复制它:
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
是只读的错误。
那我该怎么做呢?
可以使用 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);
}
}
并使用它:
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]);
}
注意:因为这使用了 NewtonSoft Json,它只会克隆 public,可写属性。因此,私有字段(与此类属性无关)中的内部状态将丢失。