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

时间:2019-09-30 16:21:44

标签: c# generics types constructor clone

因此,我想为我的类ignite.cluster().forServers().nodes() cluster.forServers().nodes() clusterGroup.nodes() 创建构造函数,该构造函数接受In EmployeeNodeClass对象并使用Deepclone函数复制它:

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); } 是只读的。

那我该怎么办?

1 个答案:

答案 0 :(得分:2)

可以使用NewtonSoft JsonConvert.PopulateObject:

示例:

Content : N

并使用它:

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);
    }
}

注意:由于此命令使用NewtonSoft Json,因此它将仅克隆公共的可写属性。因此,私有字段(与此类属性不相关)中的内部状态将丢失。

相关问题