C#克隆一个包含另一个Object类型为

时间:2015-07-08 05:33:01

标签: c# treeview clone icloneable

我一直在寻找克隆包含其他对象的对象的简单解决方案。

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包含#34; TPFTestCaseTreeNode"类型的所有树节点。

     

" T"在循环中,确实包含" Obj"的有效值。根据调试器模式

我已经尝试了正常的Clone()和DeepClone(),它们都没有能够克隆Object的状态" Obj"。它始终在克隆对象treenode" theNode"。

中保持为null

任何人都能提供合理的解释为什么克隆包含另一个对象的对象在这里失败了吗? 以下是克隆前和克隆后的两个状态。 Initial State Cloned Object

请注意,我甚至尝试过二进制格式化(序列化/反序列化机制)。但是,对象" Obj"是空的。

1 个答案:

答案 0 :(得分:0)

所以最后,我不得不使用Treenode" Tag"财产本身并指定我的" Obj"它。 但是在这里,DeepClone()或Clone()也没有克隆此Tag Property值。

基本上我必须循环实际对象的每个属性并构建克隆的属性。

对于自定义类型的Treenode这样的麻烦,但现在工作正常。

感谢大家的宝贵意见。