gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-03 18:58:22 25 4
gpt4 key购买 nike

我有两个对象,但是当我更新一个对象时,具有相同 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个不同的对象你需要实例化一个新对象

  1. 通过实现 ICloneable interface

    public class MyClass : ICloneable
    {
    public Guid Id { get; set; }

    public object Clone()
    {
    return new MyClass { Id = Id };
    }
    }
  2. 另一种方法是使用 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com