使用PrincipalSearcher FindAll的PrincipalSearchResult <T>,为什么T必须是Principal而不是UserPrincipal

Mik*_*ike 4 c# directoryservices

我只是好奇:

List<string> ADUsers = new List<string>();
using (PrincipalContext principle_context = new PrincipalContext(ContextType.Domain, "MYDOMAIN"))
using (UserPrincipal user_principal = new UserPrincipal(principle_context) { Enabled = true, Name = "*", EmailAddress = "*" })
using (PrincipalSearcher user_searcher = new PrincipalSearcher(user_principal))
using (PrincipalSearchResult<Principal> results = user_searcher.FindAll())
{
    foreach (Principal p in results)
    {
        ADUsers.Add(p.Name + " " + ((UserPrincipal)p).EmailAddress);
    }
}
Run Code Online (Sandbox Code Playgroud)

...有没有办法避免在这里投射我的结果?我想做的事情如下:

using (PrincipalSearchResult<UserPrincipal> results = user_searcher.FindAll())
Run Code Online (Sandbox Code Playgroud)

...所以我的搜索结果将是我需要它的类型,但似乎FindAll方法只允许使用该<Principal>类型.有没有更好的办法?

谢谢.

juh*_*arr 7

实际上foreach会为你输出枚举值,这样你就可以做到这一点

foreach (UserPrincipal p in results)
{
    ADUsers.Add(p.Name + " " + p.EmailAddress);
}
Run Code Online (Sandbox Code Playgroud)

假设Name被内定义UserPrincipal以及Principal.