我正在尝试编写一些填充 List
的代码(实际上,它是一系列 List
,但我们可以假装它只是一个 List
)。其想法是将 IPackage
添加到 List
以获取订购的 IPackage
总量。见以下代码:
ParseExcel pe = new ParseExcel();
Pinnacle p = pe.ParsePinnacleExcel();
Rack r = new Rack(20,2,4.5,96,42,6,25*12);
foreach (PinnacleStock ps in p.StockList.Where(x =>
x.ColorCode == "10" &&
x.PackageLength == 30.64))
{
for (int i = 1; i <= ps.OnOrder; i++)
{
r.TryAddPackage((IPackage)ps);
}
}
只要 IPackage
被重复添加到列表中,一切似乎都运行良好。但是,似乎正在添加对象的同一实例,即每次将对象添加到列表时都不会复制该对象。
我需要做什么来确保将对象的 副本 插入到列表中,而不仅仅是额外的引用?
最佳答案
然后你需要实现ICloneable
并替换
r.TryAddPackage((IPackage)ps);
与
r.TryAddPackage((IPackage)ps.Clone());
如何由您决定Clone
应该填充它返回的 PinnacleStock
的新实例。
在最基本的层面上,你可以说
public PinnacleStock : ICloneable {
public PinnacleStock Clone() {
return (PinnacleStock)this.MemberwiseClone();
}
object ICloneable.Clone() {
return Clone();
}
// details
}
这只会对 PinnacleStock
进行浅拷贝。只有您知道这是否是您域的正确语义。
关于c# - 如何复制对象的实例?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2106725/