[英]How to add all leaves of a tree to a list in C#
我目前正在編寫一些通過一些LDAP查詢搜索Active Directory的代碼。 我遇到一種情況,我有一個Principal
類型的對象,它是GroupPrincipal
或UserPrincipal
。 但是,如果它是GroupPrincipal
則可能包含UserPrincipal
類型的UserPrincipal
。 我想將UserPrincipal
類型的所有項目提取到一個列表中,以便可以對它們執行一些其他過程。
我想可以使用樹來做到這一點,但不確定如何做到。
這是我寫的無效代碼,僅深入兩個節點並打印名稱,而不是將其添加到列表中:
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);
}
}
}
}
嘗試這個:
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);
}
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.