我已经搜索了这么久,很难为此,现在我在公路的尽头。我的这个问题比这个项目更多,但我最终取消了其他项目。我有一个代码(C#),这基本上是我试图做霍夫曼树。有一次,我这样做(“节点列表”的列表(节点)):C#对象突然无效
Node node = new Node(nodeList[0], nodeList[1]);
nodeList.Add(node); // Adds a new node which includes two subnodes.
// Remove nodes from list (as they are now included in another node)
nodeList.RemoveAt(0);
nodeList.RemoveAt(1);
这里使用的构造函数是:
// Constructor that takes nodes
public Node(Node left, Node right)
{
leftNode = new Node(left);
rightNode = new Node(right);
}
// Constructor that only takes 1 single node
public Node(Node copy)
{
rightNode = copy.rightNode;
leftNode = copy.leftNode;
unencodedBits = copy.unencodedBits;
encodingValue = copy.encodingValue;
positions = copy.positions;
}
我做的第二个构造为希望它会修复我的问题(认为从列表中删除节点可能会消除它)(我的节点类中的所有值都在第二个构造函数的右侧)。
问题:执行第二个“RemoveAt”节点将不再包含这两个节点。我不明白为什么。我需要做些什么来防止这种情况发生,为什么会发生(所以我可以在将来了解类似的情况)?
我大概忘了包含一些重要信息;如果我有,请告诉我。并感谢您的任何帮助。
无论何时您对代码的作用有疑问,它有助于设置断点,然后逐步执行代码。你将能够看到每个方法调用正在做什么。 – mason
我知道每种方法正在调用什么。我写了这些方法(RemoveAt除外,但我没有办法检查它是做什么的。)我只是想知道为什么它会突然删除我的对象(无论如何,不是所有的对象)。 – Morten242
You _do_ have a查看RemoveAt的功能。就像我说的那样,设置一个断点并在您逐步浏览时监视您的nodeList对象。你会看到RemoveAt对它的影响。 – mason