为什么这个对象在被分配后为空?

时间:2014-02-15 02:29:09

标签: c# null pass-by-reference

全班:https://gist.github.com/archer884/453c9937afa2dcb74f24

在我的班级(某种树)中,我有一个Node<T> _root;

在Add方法中,此变量被分配给一个名为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。我认为。也许其中一个人会澄清。

1 个答案:

答案 0 :(得分:0)

代码中的任何一点都不是实际分配给_root的{​​{1}}字段,因此tree.Root始终为null。您需要将_root分配给Add

中计算的值