如何处理父母/孩子/孙子的关系

本文关键字:孩子 关系 父母 何处理 处理 | 更新日期: 2023-09-27 18:10:54

我正在寻找一种方法来表示具有父,子和孙子对象的对象。我不想使用:

 IEnumerable<IEnumerable<IEnumerable<Node>>>

如果可能的话。

每个节点相同:

public class Node
{
    public string Text { get; set; }
    public string Value { get; set; }
    public string Title { get; set; }
}

我需要表示一个有三层数据的树状结构。

交货
 ParentNode
     ChildNode
 ParentNode
     ChildNode
         GrandChildNode
         GrandChildNode

我正试图尽可能地通用/干净地执行此操作,以便我可以重用从数据库获取此信息的服务。

有什么建议吗?

如何处理父母/孩子/孙子的关系

你可以修改你的类以适应树状的层次结构。

public class Node
{
    public string Text { get; set; }
    public string Value { get; set; }
    public string Title { get; set; }
    public Node Parent { get; private set; }
    public ICollection<Node> Children { get; private set; }
    public IEnumerable<Node> Ancestors() {
        Node current = this.Parent;
        while (current != null) {
            yield return current;
            current = current.Parent;                
        }
    }
    public IEnumerable<Node> Descendants() {
        foreach (Node c in this.Children) {
            yield return c;
            foreach (Node d in c.Descendants())
                yield return d;
        }
    }
    // Root node constructor
    public Node() {
        this.Children = new List<Node>();     
    }
    // Child node constructor
    public Node(Node parent) : this() {
        this.Parent = parent;
        parent.Children.Add(this);
    }
}

你可以这样使用:

Node gramps = new Node() { Title = "Grandparent" };
Node dad = new Node(gramps) { Title = "Parent" };
Node son = new Node(dad) { Title = "Child" };