从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,尽管我不知道该怎么做。。。。谢天谢地!
将您的类更改为此
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);
}
然后创建一个空列表并将其传递给方法