簡體   English   中英

如何在C#中將樹的所有葉子添加到列表中

[英]How to add all leaves of a tree to a list in C#

我目前正在編寫一些通過一些LDAP查詢搜索Active Directory的代碼。 我遇到一種情況,我有一個Principal類型的對象,它是GroupPrincipalUserPrincipal 但是,如果它是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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM