2016-09-29 3 views
1

부모 - 자식 목록이 있습니다. 그것은 n 레벨 일 수 있습니다.상위 수준의 상위 자식 목록 C#

이 계층 구조 내에 각 항목이 필요합니다.

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

답변

0

솔루션은 다음과 같습니다

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; 
     } 
관련 문제