C# 更新一个对象会以某种方式更新另一个对象
我有两个对象,但是当我更新其中一个时,具有相同GUID的另一个项目也会被更新,即使我试图应用新的GUID以便将它们分开C# 更新一个对象会以某种方式更新另一个对象,c#,guid,C#,Guid,我有两个对象,但是当我更新其中一个时,具有相同GUID的另一个项目也会被更新,即使我试图应用新的GUID以便将它们分开 var completedSecond = model.CompletedTransfers.First(); var transferedTransfers = model.TransferedTransfers.First(); if (transferedTransfers.Count != 0) { transferedTransfers.RowId = Gu
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个对象,但有2个对同一对象的引用。在C#中,类是引用类型,这意味着您的
completedSecond
正在引用内存中的对象,在这种情况下,它与transferedTransfers
所引用的对象相同
为了得到两个不同的对象,您需要实例化一个新对象
发生这种情况的原因是model.transferdTransfers对象是通过引用传递的,而不是通过值传递的。变量completedSecond和TransferdTransfer将两个点都传输到model.CompletedTransfers。还要注意命名气味(TransferdTransfers),这是因为model.TransferdTransfers对象是通过引用传递的,而不是通过值传递的。变量completedSecond和TransferdTransfer将两个点都传输到model.CompletedTransfers。还要注意命名气味(TransferdTranfers)内存中没有两个对象,但有两个对同一对象的引用。是否可以将它们拆分?或者使用不同的GUID将一个对象重新创建为另一个对象?如果类实现很容易拆分,请使用不同的GUI,否则,我们需要查看对象是如何构造的(即,您需要提供更多代码)。内存中没有2个对象,但有2个对同一对象的引用。是否可以将它们拆分?或者使用不同的GUID将一个对象重新创建为另一个对象?使用不同的GUI如果类实现很容易拆分它们,否则,我们需要查看对象是如何构造的(即,您需要提供更多的代码)。那么,由于您是从其他对象(克隆)实例化某个对象,所以实际实例化是什么样子的呢?那么,由于您是从其他对象(克隆)实例化某个对象,所以实际实例化是什么样子的呢?
public class MyClass : ICloneable
{
public Guid Id { get; set; }
public object Clone()
{
return new MyClass { Id = Id };
}
}
public class MyClass
{
public Guid Id { get; set; }
public MyClass() { }
public MyClass(MyClass other)
{
Id = other.Id;
}
}