如何深度克隆C#中的互连对象?

zil*_*n01 5 c# clone

深度克隆一组互连对象的最佳方法是什么?例:

class A {
    B theB; // optional
    // ...
}

class B {
    A theA; // optional
    // ...
}

class Container {
    A[] a;
    B[] b;
}
Run Code Online (Sandbox Code Playgroud)

显而易见的事情就是走向对象并深入克隆一切,因为我来到它.然而,这会产生一个问题 - 如果我克隆一个A包含a 的那个B,并且它B也在Container那里,B那么克隆后我将克隆两次Container.

下一个逻辑步骤是Dictionary在克隆之前创建并查找每个对象.然而,这似乎可能是一个缓慢而无法解决的问题.

有什么想法吗?

Jos*_*dan 2

这当然不是一个优雅的解决方案,但使用字典(或哈希图)并不罕见。好处之一是哈希图具有恒定的查找时间,因此速度在这里并不会真正受到影响。