克隆要添加到列表中的变量

本文关键字:变量 列表 添加 | 更新日期: 2023-09-27 18:19:36

我有如下代码:

var feeCTC = new FeeGroup(); feeCTC = feeGroup;
var feeWYS = new FeeGroup(); feeWYS = feeGroup;
feeCTC.FeeValue = 231;
firstList.Add(feeCTC);
feeWYS.FeeValue = 1269;
secondList.Add(feeWYS);

我遇到的问题是,一旦我得到设置feeWYS.FeeValue的第二个计算,feeCTC.FeeValue也会更新为相同的数字(它在firstList中的值也是如此),这让我相信它们是对同一地址的引用。如何克隆feeGroup以便操作其值(并且不使用ICloneable接口)?

克隆要添加到列表中的变量

feeCTC = feeGroup;不会克隆feeGroup。它将引用复制到feeCTC。因此feeCTCfeeWYS都引用了相同的对象。这就是为什么你通过一个引用所做的任何更改都会反映在另一个引用中。

如何克隆feeGroup以便操作其值(并且不使用ICloneable接口)?

一些选项:

  • 编写一个单独复制属性的克隆方法(确保也关闭引用类型)
  • 只在构造函数中编写一个执行相同操作的复制构造函数。复制构造函数的一个好处是,您可以访问两个对象的私有字段,这在某些情况下可能很方便
  • 使用Object.MemberwiseClone进行浅层复制(再次确保关闭引用类型属性
  • 将对象序列化为内存流并对其进行反序列化

注意,IClonable非常无用,因为它只定义了一个Clone方法,但没有提供任何实现或上下文来指示关闭是浅克隆还是深克隆。