不引用原始对象的情况下制作副本对象

36 浏览
0 Comments

不引用原始对象的情况下制作副本对象

这个问题已经有答案了:

深度克隆对象

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

public void myFunction(Object original)
{
    var copyOfObject = original;
    copyOfObject.SomeProperty = 'a';
}

从阅读中,我猜我正在创建原始对象的浅复制,因此当我更新新对象的属性时,这会导致原始对象上的属性也发生改变?我看过一些复制整个对象列表来创建深复制的示例,但我只想创建这个单个对象的深度复制,而不是整个列表。我能否在进行更改之前进行以下操作而不必进行:

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

的操作吗?

admin 更改状态以发布 2023年5月21日
0
0 Comments

你可以使用序列化-反序列化来复制对象,实现深度复制。

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

然后使用以下方式;

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

0