从列表中删除时,c#对象丢失引用

时间:2010-12-08 00:18:40

标签: c# list reference tree

我有一个非常奇怪的问题。基本上我创建了一个名为TreeNode的类,它表示树中的节点。然后,我通过将所有节点添加到List来创建树。

class TreeNode
{

    private TreeNode parent, lChild, rChild;
    private int key, val;

    public int Key
    {
        get { return key; }
        set { key = value; }
    }
    public int Val
    {
        get { return val; }
        set { val = value; }
    }

    public TreeNode Parent
    {
        get { return parent; }
        set { parent = value; }
    }
    public TreeNode LChild
    {
        get { return lChild; }
    }
    public TreeNode RChild
    {
        get { return rChild; }
    }

    public TreeNode(int k, int v)
    {
        key = k;
        val = v;
    }

    public void SetChild(TreeNode leftChild, TreeNode rightChild)
    {
        this.lChild = leftChild;
        this.rChild = rightChild;

    }

    public bool isLeaf()
    {
        if (this.lChild == null && this.rChild == null) 
        {
            return true;
        } else 
        {
            return false;
        }
    }

    public bool isParent()
    {
        if (this.parent == null)
        {
            return true;
        }
        else
        {
            return false;
        }
    }

    public void SetParent(TreeNode Parent)
    {
        this.parent = Parent;
    }
}

因此,如果我在创建树之后放置断点并将鼠标悬停在Visual Studio中的列表上,我可以看到树的结构 - 所有引用都可以从根到叶完美地工作。

但是,如果我执行以下操作:

TreeNode test = newTree[newTree.Count - 1];

请注意:

private List<TreeNode> newTree = new List<TreeNode>();

返回根节点 - 然后将鼠标悬停在一个级别(即左子或右子),但这些孩子在此之后没有任何对他们孩子的引用。

我想知道我是否会将内存中的引用丢失到列表中的其他节点,因为测试节点不是列表的一部分?

非常感谢任何帮助。

由于 汤姆

2 个答案:

答案 0 :(得分:1)

你确定没有(注意你的代码中新的和树之间没有空格)

TreeNode test = new Tree[newTree.Count - 1]; 

哪个会创建一个新的空树数组(可能不是你想要的那样),并使你的原始树没有根,不可访问。

你能确定你的代码是否正确吗?

答案 1 :(得分:0)

好像我发现了问题 - 我没有正确地更新一些父节点及其相关的子节点 - 问题已经解决。

感谢您的帮助 汤姆