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, но теперь работает нормально.
Спасибо всем за ценный вклад.