C# 更新一个对象会以某种方式更新另一个对象

C# 更新一个对象会以某种方式更新另一个对象,c#,guid,C#,Guid,我有两个对象,但是当我更新其中一个时,具有相同GUID的另一个项目也会被更新,即使我试图应用新的GUID以便将它们分开 var completedSecond = model.CompletedTransfers.First(); var transferedTransfers = model.TransferedTransfers.First(); if (transferedTransfers.Count != 0) { transferedTransfers.RowId = Gu

我有两个对象,但是当我更新其中一个时,具有相同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个对象,但有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;
              }
          }