制作对象副本而不引用原始对象

时间:2018-03-14 11:18:55

标签: c#

我有一个函数,它将列表中的对象作为参数。我创建了这个对象的新实例,并使其等于传递给函数的对象。我更改了新对象的一些属性,但这些更改也会应用于列表中的原始对象。例如:

public void myFunction(Object original)
{
    var copyOfObject = original;

    copyOfObject.SomeProperty = 'a';
}

从阅读开始,我想我正在创建原始对象的浅表副本,所以当我更新新对象的属性时,这会导致原始属性更改为?我已经看到了复制整个对象列表以创建深层副本的一些示例,但我只想创建此单个对象的深层副本而不是整个列表。我可以这样做而不必这样做:

  copyOfObject = new Object();
  copyOfObject.someProperty = original.someProperty;

在进行更改之前?

1 个答案:

答案 0 :(得分:1)

您可以对对象应用serialize-deserialize来创建深层复制。

public static class ObjectExtensions
{
    public static T Clone<T>(this T obj)
    {
        return (T)JsonConvert.DeserializeObject(JsonConvert.SerializeObject(obj));
    }
}

然后使用;

public void myFunction(Object original)
{
    var copyOfObject = original.Clone();
}