2016-12-30 86 views
0

我目前正在編寫一些代碼,通過一些LDAP查詢來搜索Active Directory。我遇到了類型爲Principal的對象,這是GroupPrincipalUserPrincipal。但是,如果它是GroupPrincipal它可能包含UserPrincipal類型的對象。我想將類型UserPrincipal的所有項目提取到一個列表中,以便我可以對其執行一些其他過程。如何添加一棵樹的所有樹葉到C#列表中

我想可以使用樹做,但我不知道如何。

這裏是我寫的是無效代碼,只去兩個節點深,打印的名字,而不是將其添加到列表:

foreach (var principal in group.GetMembers()) 
{ 
    if (principal is UserPrincipal) 
    { 
     var uPrincipal = principal as UserPrincipal; 
     Console.WriteLine("User: " + uPrincipal.Name); 
    } 
    else if (principal is GroupPrincipal) 
    { 
     var gPrincipal = principal as GroupPrincipal; 
     Console.WriteLine("Group: " + gPrincipal.Name); 
     foreach(var principalito in gPrincipal.GetMembers()) 
     { 
      if (principalito is UserPrincipal) 
      { 
       var uPrincipalito = principalito as UserPrincipal; 
       Console.WriteLine(">>User: " + uPrincipalito.Name); 
      } 
      else if(principalito is GroupPrincipal) 
      { 
       var gPrincipalito = principalito as GroupPrincipal; 
       Console.WriteLine(">>Group: " + gPrincipalito.Name); 
      } 
     } 
    } 
} 
+0

我相信你可以使用方法:GroupPrincipal.GetMembers(true),然後檢查它是否屬於UserPrincipal類型,然後將其添加到列表中。 – Nyranith

+0

是的,但如果該成員是一個組本身呢? – iliyandobrev

回答

0

試試這個:

public void getAllUserPrinicpals(ref List<UserPrincipal> principals, GroupPrincipal principal) 
    { 
     if (principal != null) 
     { 
      foreach (Principal princ in principal.GetMembers(true)) 
      { 
       if (princ is UserPrincipal) 
        principals.Add((UserPrincipal)princ); 
       else if (princ is GroupPrincipal) 
        getAllUserPrinicpals(ref principals, (GroupPrincipal)princ); 
      } 
     } 
    } 
+0

是的,謝謝你,似乎完美的工作! – iliyandobrev