gpt4 book ai didi

c# - 复制对象并在不更改原始对象的情况下使用复制对象

转载 作者:IT王子 更新时间:2023-10-29 04:21:06 26 4
gpt4 key购买 nike

假设我有一个对象 ItemVO,其中已经分配了一堆属性。例如:

ItemVO originalItemVO = new ItemVO();
originalItemVO.ItemId = 1;
originalItemVO.ItemCategory = "ORIGINAL";

我想使用 :

创建另一个副本
duplicateItemVO = originalItemVO;

然后使用 duplicateItemVO 并改变它的属性,而不改变 originalItemVO:

// This also change the originalItemVO.ItemCategory which I do not want.
duplicateItemVO.ItemCategory = "DUPLICATE"

如何在不更改类 ItemVO 的情况下实现这一目标?

谢谢

public class ItemVO     
{
public ItemVO()
{
ItemId = "";
ItemCategory = "";
}

public string ItemId { get; set; }
public string ItemCategory { get; set; }
}

最佳答案

为了更改一个实例而不更改另一个实例,您需要克隆该实例的实际值而不是引用。.Net 中使用的模式是实现 ICloneable。所以你的代码看起来像这样:

public class ItemVO: ICloneable
{
public ItemVO()
{
ItemId = "";
ItemCategory = "";
}

public string ItemId { get; set; }
public string ItemCategory { get; set; }

public object Clone()
{
return new ItemVO
{
ItemId = this.ItemId,
ItemCategory = this.ItemCategory
};
}
}

现在请注意,在使用 Clone() 时需要显式转换(或者您可以自己创建返回 ItemVO 的转换)。

duplicateItemVO = (ItemVO) originalItemVO.Clone(); 

关于c# - 复制对象并在不更改原始对象的情况下使用复制对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9233046/

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