List 遍历n级父子列表C#
我有一份亲子名单。它可以是n级 我需要这个层次结构中的每个项目 我正在使用“foreach”循环和递归函数,但它不起作用 我曾在“stackoverflow”上使用过其他解决方案,但没有一个对我有效List 遍历n级父子列表C#,list,parent-child,traversal,List,Parent Child,Traversal,我有一份亲子名单。它可以是n级 我需要这个层次结构中的每个项目 我正在使用“foreach”循环和递归函数,但它不起作用 我曾在“stackoverflow”上使用过其他解决方案,但没有一个对我有效 public class Item { public int Id { get; set; } public string Name { get; set; } public int ParentId { get; set; } private List<
public class Item
{
public int Id { get; set; }
public string Name { get; set; }
public int ParentId { get; set; }
private List<Item> children = new List<Item>();
public List<Item> Children
{
get { return children; }
set { children = value; }
}
}
List<Item> test = new List<Item>();
test.Add(new Item { Id = 1, Name = "Root1", ParentId = -1 });
test[0].Children.Add(new Item { Id = 4, Name = "child-1-Root1", ParentId = 1 });
test[0].Children[0].Children.Add(new Item { Id = 10, Name = "grandchild-1-Root1", ParentId = 4 });
test[0].Children.Add(new Item { Id = 5, Name = "child-2-Root1", ParentId = 1 });
test.Add(new Item { Id = 2, Name = "Root2", ParentId = -1 });
test[1].Children.Add(new Item { Id = 6, Name = "child-1-Root2", ParentId = 2 });
test[1].Children.Add(new Item { Id = 7, Name = "child-2-Root2", ParentId = 2 });
test.Add(new Item { Id = 3, Name = "Root3", ParentId = -1 });
test[2].Children.Add(new Item { Id = 8, Name = "child-1-Root3", ParentId = 3 });
test[2].Children.Add(new Item { Id = 9, Name = "child-2-Root3", ParentId = 3 });
公共类项目
{
公共int Id{get;set;}
公共字符串名称{get;set;}
public int ParentId{get;set;}
私有列表子项=新列表();
公开儿童名单
{
获取{返回子项;}
设置{children=value;}
}
}
列表测试=新列表();
添加(新项{Id=1,Name=“Root1”,ParentId=-1});
测试[0]。Children.Add(新项{Id=4,Name=“child-1-Root1”,ParentId=1});
测试[0]。子项[0]。子项。添加(新项{Id=10,Name=“孙子-1-Root1”,ParentId=4});
测试[0]。Children.Add(新项{Id=5,Name=“child-2-Root1”,ParentId=1});
添加(新项{Id=2,Name=“Root2”,ParentId=-1});
test[1].Children.Add(新项{Id=6,Name=“child-1-Root2”,ParentId=2});
测试[1]。Children.Add(新项{Id=7,Name=“child-2-Root2”,ParentId=2});
添加(新项{Id=3,Name=“Root3”,ParentId=-1});
测试[2]。Children.Add(新项{Id=8,Name=“child-1-Root3”,ParentId=3});
test[2].Children.Add(新项{Id=9,Name=“child-2-Root3”,ParentId=3});
解决方案是:
public static Find()
{
foreach (var item in test)
{
FindRecursively(item, item.Name);
}
}
public static Item FindRecursively(Item node, string name)
{
if (node == null)
return null;
if (node.Name == name)
Console.WriteLine(node.Name);
foreach (var child in node.Children)
{
var found = FindRecursively(child, child.Name);
}
return null;
}