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

标签 c# .net oop

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

相关文章:

c# - 如何从 Azure 函数中的声明性绑定(bind)引用 {rand-guid} 值?

c# - 在 Button_Click 事件中使用 c# 构建和发布(ASP.NET Web 应用程序)

.net - 使用不安全代码的含义是什么

java - 如何在类之间高效共享函数而不违反里氏替换原则

从 child 访问 PHP 私有(private)变量

javascript - 设置 this.constructor = this 会导致循环引用/内存泄漏

c# - 如何获取作为另一个元素后代的多个 XML 元素

c# - 如何跟踪程序集的多个版本?

c# - 大型数据集(SQL 到 C#)、加载时间长的修复

.net - 有没有办法获取使用 Azure SDK for .NET 部署的 ARM 模板的输出参数?