1

オプションでそれ自体のリストを含めることにより、ツリー構造に配置するクラスがあります。次のようなものです。

class MyClass
{
    List<MyClass> MyClassList;
    ...
}

要素がその親コレクションを呼び出す方法はありますか? お気に入り、

class MyClass
{
    List<MyClass> MyClassList;
    ...

    private void AddItemToParentCollection()
    {
        parent.MyClassList.Add(new MyClass());
    }
}

ツリーが見つかるまでツリーをたどることで、ツリー内のどこにあるのか (そしてその親がどこにあるのか) をクラスに伝える関数を書くことができると思いますが、もっときちんとした方法があることを願っています。

4

1 に答える 1

1
class Node
{
    Node parent;
    List<Node> children = new List<Node>();

    public void Add(Node child)
    {
        if (child.Parent != null)
            // throw exception or call child.Parent.Remove(child)

        children.Add(child);
        child.Parent = this;
    }

    public void Remove(Node child)
    {
        if (child.Parent != this)
           // throw exception

        children.Remove(child);
        child.Parent = null;
    }
}

このような構造を使用すると、アイテムを親コレクションに追加できます(子ノードの責任である必要があるかどうかはわかりません):

private void AddItemToParentCollection()
{
    if (Parent == null)
       // throw exception 

    Parent.Add(new Node());
}
于 2013-01-05T15:07:46.870 に答える