复制List <t> </t>中的对象

时间:2012-01-09 19:28:52

标签: visual-studio-2010 c#-4.0 generic-collections

第一个问题的时间!我想让我知道我在编程方面非常业余,我可能还不完全理解我即将使用的术语。

我正在制作一个程序,它从Oracle Query中获取结果并将它们显示在DataGridView中进行操作。数据将与拼版软件一起使用,我需要能够“拆分”和“连接”行以制作副本。

数据来自我的服务层,作为名为CheckOrderLine的通用集合,包含20个包含所有数据的对象。

我正在寻找一种从我的Binding Source,_bs获取当前CheckOrderLine的方法,并使用所有相同的值创建一个新的CheckOrderLine。我相信这被称为深层复制品。

我了解到我可以使用以下代码来实现我的目标,但我确信有更好的方法:

    CheckOrderLine current = (CheckOrderLine)_bs.Current;
    CheckOrderLine cloned = new CheckOrderLine();

    cloned.OrderNumber = current.OrderNumber;
    cloned.Qty = current.Qty;

等等。

所以我想我的问题是:有没有办法迭代CheckOrderLine并为我的新对象中的每个属性设置值?此外,我的方向是否有可怕的错误?我已经看到网络上有关于在我的CheckOrderLine课程中使用ICloneable的事情,但是现在这已经超出了我的想法。

编辑:有错误的VS标记。我修了一些词汇。

1 个答案:

答案 0 :(得分:2)

祝贺你的第一个项目。你走在正确的轨道上 - 从一个纯粹的“做它工作”的角度来看,你现在这样做的方式没有任何问题 - 只需复制一个又一个属性。

专业开发人员通常(希望)尝试以“优雅”的方式开发代码。在这种情况下,优雅可能意味着包括克隆CheckOrderLine类的中的CheckOrderLine 的逻辑(作为方法)。这样,如果您在应用程序中找到需要克隆这些内容的其他位置,则可以调用相同的函数,并且对该函数的任何错误修复都将改善复制类的两个位置。您不需要实现ICloneable接口来实现这一点 - 它主要只是一种惯例。

您还可以使用一种名为Reflection的技术以编程方式迭代属性并将它们复制到一个新对象,但现在可能已经超出了您的想法。