C# Клонировать специализированный TreeNode, содержащий другой объект типа Object

Я искал простое решение для клонирования объекта, содержащего другие объекты.

public class TPFTestCaseTreeNode: TreeNode, ICloneable
{
    public Object Obj;

    public TPFTestCaseTreeNode(string Title, Object O)
    {
        // Set attributes for the TreeNode
        Text = Title; // not sure which one we need
        Name = Title; // not sure which one we need

        // And additionally, remember the test case object
        Obj = O;
    }
} 

Для клонирования я использую:

foreach(TreeNode t in listAllTestCases)
{
    if(t.Name.Equals(testCaseIdDesc))
    {
        theNode = (TreeNode)((ICloneable)t).DeepClone();                     
    }
}

listAllTestCases содержит все узлы дерева типа "TPFTestCaseTreeNode".

"t" в цикле, содержит допустимое значение для "Obj" в режиме отладчика

Я пробовал обычные Clone() и DeepClone(), но ни один из них не смог клонировать состояние объекта "Obj". Он всегда остается нулевым в клонированном объекте триода "theNode".

Может ли кто-нибудь дать правдоподобное объяснение, почему клонирование объекта, содержащего другой объект, не удается здесь? Вот два состояния: Начальное до клонирования и после клонирования. Начальное состояние клонированного объекта

Обратите внимание, что я даже попробовал двоичный форматер (механизм сериализации / десериализации). Но все же объект "Obj" является нулевым.

1 ответ

Итак, наконец, мне пришлось использовать само свойство "Tag" Treenode и присвоить ему "Obj". Однако и здесь DeepClone() или Clone () не клонировали это значение свойства тега.

По сути, мне приходилось зацикливаться на каждом свойстве реального объекта и создавать клонированное.

Такое беспокойство для пользовательских типов Treenode, но теперь работает нормально.

Спасибо всем за ценный вклад.

Другие вопросы по тегам