完整的类在这里: https://gist.github.com/archer884/453c9937afa2dcb74f24
在我的班级(某种树)中,我有一个Node<T> _root;
在 Add 方法中,这个变量被分配给一个名为 Simply node
的局部变量,然后我们对 node
做了一些工作,包括在下面。
while (node != null)
{
nodeDimensions = Dimensions(node.Item);
if (dimensions.SequenceEqual(nodeDimensions))
throw new ArgumentException("An element with the same key already exists in the tree.");
dimension = depth % dimensions.Count;
comparison = dimensions[dimension].CompareTo(nodeDimensions[dimension]);
if (comparison <= 0)
{
node = node.LeftChild;
continue;
}
else
{
node = node.RightChild;
continue;
}
}
node = new KdTreeNode<TItem>(item);
所以,对我来说,这看起来我只是从该变量中分配复活节彩蛋,但我的测试用例不同意:Assert.NotNull(tree.Root);
总是失败。
编辑:对于未来的读者,我会注意到以下内容有效。
if (_root == null)
{
_root = new KdTreeNode<TItem>(item);
return;
}
这样_root当我们开始分配东西时,就不会引用 null。我认为。也许其他这些人中的一个会澄清。
在代码中的任何一点都没有实际分配给_root
字段,因此tree.Root
将始终null
。 您需要将_root
分配给以 Add
计算的值