深度克隆相关问题

时间:2010-10-20 13:13:52

标签: c#

我在C#中实现了一种进化算法,哪种方法有效,但我假设克隆没有。该算法维护一群对象树。每个对象(树)可以是克隆的结果(例如在“自然选择”之后),并且应该是由唯一对象组成的唯一对象。有没有一种简单的方法来确定“对象群体”是否包含唯一/不同的对象 - 换句话说,对象是否由多个树共享?我希望我的问题有道理。

感谢。

祝福,

基督教

PS:我通过序列化实现(我认为)深拷贝克隆,请参阅:

http://www.codeproject.com/KB/tips/SerializedObjectCloner.aspx

5 个答案:

答案 0 :(得分:1)

验证两个对象是否是内存中相同对象的方法是使用Object.ReferenceEquals进行比较。这将检查“指针”是否相同。

答案 1 :(得分:0)

C#中的克隆默认为浅拷贝。您可能需要google for tutorials的关键字是“深度克隆”,以便创建不共享引​​用的对象图。

答案 2 :(得分:0)

如下所示:为每个类添加一个静态计数器,用于“主树类”的成员引用。增量在每个结构者中对抗它。确定树对象(或所有树对象)中应包含多少个子对象,并将其与计数器进行比较。

答案 3 :(得分:0)

好的,首先,让我看看我是否能帮助你:

RESULT是一个包含一些数据的对象树。

GENERATION是结果对象的集合。

你有一些'进化'方法可以将每个GENERATION移动到下一步。

如果你想检查一个RESULT是否与另一个相等,你应该在它上面实现IComparable,并为每个成员做同样的事。

此外:

尝试摆脱那种克隆,并手动制作克隆 - 它会更快。速度对你来说至关重要,因为所有的启发式都归结为肌肉。

答案 4 :(得分:0)

如果你问的是“我如何检查两个对象变量是否引用相同的内存,你可以调用Object.ReferenceEquals