从Child获取(家长)列表

本文关键字:列表 家长 Child 获取 | 更新日期: 2023-09-27 17:58:20

public class Folder
{
    public int ID { get; set; }
    public List<Folder> Children { get; set; }
}

然而,我有一个递归树,根据一些文件夹的不同,我需要返回并向父文件夹添加一个(状态(。

当我在父文件夹中创建子文件夹时,我可以毫无问题地更新以前的级别。然而,我很难回到更多级别。。。举个例子。。

1 Appliances NULL (Active)
2 TV 1 (Active)
3 Radio 1 (Active)
4 Furniture NULL (Active)
5 Chair 4 (Active)
6 Sofa 4 (Active)
7 Specials 4 (Active)
8 Golden Sofa 7 (Not Active)

比方说,我需要回到Specials,让它不活跃,没关系,我没有问题,但我需要回到Specials家长(家具(,让它也不活跃。。。。

C#请帮忙!

我不介意使用LINQ,尽管我不知道该怎么做。。。。谢天谢地!

从Child获取(家长)列表

将您的类更改为此

public class Folder
{
    public Folder Parent{get;set;}
    public int ID { get; set; }
    private List<Folder> children { get; set; }
    public ReadOnlyCollection<Folder> Children { get { return children.AsReadOnly();}
    public void AddChildern(Folder child)
    {
       child.Parent = this;
       children.Add(child);
    }
    public void RemoveChildren(Folder child)
    {
       ...
    }
}

所以你可以向前或向后遍历你的文件夹,然后用一个简单的递归函数,你可以进入顶级n级

例如,你想在父节点中找到一个节点,你可以通过这个方法来完成

public Folder FindInParentsByID(Folder node,int ID)
{
   if (node.Parent == null)
     return null;
   if (node.Parent.ID == ID)
     return node.Parent;
   else
     return FindInParentByID(node.Parent,ID)
}

或者如果你想要所有的父母,你可以通过这种方法

public void FetchAllParents(Folder node, List<Folder> parentlist)
{
  if (node.Parent == null)
     return;
  parentlist.Add(node.Parent);
  FetchAllParents(node.Parent, parentList);
}

然后创建一个空列表并将其传递给方法