gpt4 book ai didi

c# - 如何复制对象的实例?

转载 作者:可可西里 更新时间:2023-11-01 07:53:55 25 4
gpt4 key购买 nike

我正在尝试编写一些填充 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/

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