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 |
在做出改变之前?
可以为对象应用序列化反序列化以创建深度复制。
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(); } |