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

从列表中删除c#对象时会丢失引用,c#,list,reference,tree,C#,List,Reference,Tree,我有一个很奇怪的问题。基本上,我创建了一个名为TreeNode的类,它表示树中的一个节点。然后通过将所有节点添加到列表中来创建树 class TreeNode { private TreeNode parent, lChild, rChild; private int key, val; public int Key { get { return key; } set { key = value; } } pub

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

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>();
private List newTree=newlist();
它返回根节点,然后再次悬停在上面,我可以向下执行一个级别(即左子级或右子级),但这些子级在此之后没有对其子级的任何引用

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

任何帮助都将不胜感激

谢谢 Tom

您确定没有(请注意,代码中的new和tree之间没有空格)

这将创建一个新的空树数组(可能不是您想要的),并使您的原始树没有根且无法访问


您能确保您的代码正确吗?

似乎我发现了问题-我没有正确地用相关子节点更新某些父节点-问题已解决

谢谢你的帮助
汤姆

嗨,我为没有说得更清楚而道歉……'“newtree”是一个TreeNode的列表——我知道,我只是太懒了。所以代码是正确的,谢谢
TreeNode test = new Tree[newTree.Count - 1];