我有两个对象,但是当我更新一个时,具有相同GUID的另一个项目也会更新,即使我正在尝试应用新的GUID以便我可以将它们分开.
var completedSecond = model.CompletedTransfers.First();
var transferedTransfers = model.TransferedTransfers.First();
if (transferedTransfers.Count != 0) {
transferedTransfers.RowId = Guid.NewGuid();
}
Run Code Online (Sandbox Code Playgroud)
当我运行此代码时,这两个项具有相同的GUID,但是当我更新第二个具有新GUID时,第一个对象也获得该新GUID.这怎么可能?
您没有2个对象,但在内存中有2个对同一对象的引用.在C#类中,引用类型意味着您completedSecond正在引用内存中的对象,在这种情况下,该对象transferedTransfers与引用的对象相同.
为了获得2个不同的对象,您需要实例化一个新对象
通过实现ICloneable界面
public class MyClass : ICloneable
{
public Guid Id { get; set; }
public object Clone()
{
return new MyClass { Id = Id };
}
}
Run Code Online (Sandbox Code Playgroud)另一种方法是拥有一个复制构造函数:
public class MyClass
{
public Guid Id { get; set; }
public MyClass() { }
public MyClass(MyClass other)
{
Id = other.Id;
}
}
Run Code Online (Sandbox Code Playgroud)阅读本文以了解两种方式之间的差异:复制构造函数与克隆()
另外,在谈论对象的复制时,你会得到所谓的深拷贝和浅拷贝.有关这些的更多信息,请访问: