从同一类型获取对象的构造函数

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,可写属性。因此,私有字段(与此类属性无关)中的内部状态将丢失。