【发布时间】:2015-09-25 20:47:53
【问题描述】:
我一直在寻找一种简单的解决方案来克隆包含其他对象的对象。
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”中始终保持为空。
谁能提供一个合理的解释为什么包含另一个对象的对象的克隆在这里失败? 这是克隆前和克隆后的两种状态。 Initial State Cloned Object
请注意,我什至也尝试过 binaryformatter(序列化/反序列化机制)。但是,对象“Obj”仍然为空。
【问题讨论】:
-
你们是如何实现
DeepClone的? -
Deep cloning objects的可能重复
-
在循环中,t 是 TreeNode 而不是 TPFTestCaseTreeNode。它不会包含 Obj 的定义。
-
我发现进行深度克隆的最佳方法是编写自己的构造函数并使用其他对象数据创建一个新对象
标签: c# treeview clone icloneable