克隆变量以添加到列表

时间:2015-10-28 17:26:14

标签: c# reference

我的代码如下:

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的值也会更新为{{ 1}}),这使我相信它们是对同一地址的引用。如何克隆feeGroup以便我可以操纵其值(并且不使用ICloneable接口)?

1 个答案:

答案 0 :(得分:1)

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

  

如何克隆feeGroup以便我可以操纵其值(而不使用ICloneable接口)?

一些选项:

  • 编写一个单独复制属性的克隆方法(确保关闭引用类型)
  • 编写一个复制构造函数,它只在构造函数中执行相同的操作。复制构造函数的一个好处是您可以访问这两个对象的私有字段,这在某些情况下可能很方便。
  • 使用Object.MemberwiseClone制作浅色副本(再次确保关闭引用类型属性。
  • Serialize the object to a memory stream and deserialize it

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