我有两个对象,但是当我更新一个对象时,具有相同 GUID 的另一个项目也会更新,即使我试图应用一个新的 GUID 以便我可以将它们分开。
var completedSecond = model.CompletedTransfers.First();
var transferedTransfers = model.TransferedTransfers.First();
if (transferedTransfers.Count != 0) {
transferedTransfers.RowId = Guid.NewGuid();
}
当我运行此代码时,这两个项目具有相同的 GUID,但是当我更新第二个项目以具有新的 GUID 时,第一个对象也获得了新的 GUID。这怎么可能?
最佳答案
您没有 2 个对象,但有 2 个对内存中同一对象的引用。在 C# 中,类是引用类型,这意味着您的 completedSecond
正在引用内存中的一个对象,在这种情况下,它与 transferedTransfers
正在引用的对象相同。
为了得到2个不同的对象你需要实例化一个新对象
通过实现
ICloneable
interfacepublic class MyClass : ICloneable { public Guid Id { get; set; } public object Clone() { return new MyClass { Id = Id }; } }
另一种方法是使用 copy constructor :
public class MyClass { public Guid Id { get; set; } public MyClass() { } public MyClass(MyClass other) { Id = other.Id; } }
阅读这两种方式之间的差异:Copy constructor versus Clone()
此外,在谈到对象的复制时,您有所谓的深复制和浅复制。您可以在这里找到更多关于这些的信息:
关于c# - 更新一个对象会以某种方式更新另一个对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40289881/