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,并让它不活跃,没关系,我没有问题,但我需要回到特殊的父母(家具)并让它不活跃......
C#求助!
我不介意使用LINQ不知道如何做到这一点.... MERCI!
答案 0 :(得分:1)
将您的班级更改为此
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);
}
并创建一个空列表并将其传递给方法