Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
List 遍历n级父子列表C#_List_Parent Child_Traversal - Fatal编程技术网

List 遍历n级父子列表C#

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<

我有一份亲子名单。它可以是n级

我需要这个层次结构中的每个项目

我正在使用“foreach”循环和递归函数,但它不起作用

我曾在“stackoverflow”上使用过其他解决方案,但没有一个对我有效

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;
        }