关于c#:制作没有引用原件的对象副本


Make Copy of Object Without Reference To Original

本问题已经有最佳答案,请猛点这里访问。

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

1
2
3
4
5
6
public void myFunction(Object original)
{
    var copyOfObject = original;

    copyOfObject.SomeProperty = 'a';
}

通过阅读,我猜我正在创建原始对象的一个浅副本,所以当我更新新对象的属性时,原始对象的属性会变为?我看到了一些复制整个对象列表以创建深度复制的示例,但我只想创建此单个对象的深度复制,而不是整个列表。我可以不必这样做吗?

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

在做出改变之前?


可以为对象应用序列化反序列化以创建深度复制。

1
2
3
4
5
6
7
public static class ObjectExtensions
{
    public static T Clone<T>(this T obj)
    {
        return (T)JsonConvert.DeserializeObject(JsonConvert.SerializeObject(obj));
    }
}

然后使用;

1
2
3
4
public void myFunction(Object original)
{
    var copyOfObject = original.Clone();
}