我只是好奇:

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

...有没有办法避免将我的结果转换在这里?我想做类似的事情:
using (PrincipalSearchResult<UserPrincipal> results = user_searcher.FindAll())

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

谢谢你。

最佳答案

实际上 foreach 会为你转换枚举值,所以你可以这样做

foreach (UserPrincipal p in results)
{
    ADUsers.Add(p.Name + " " + p.EmailAddress);
}

假设 NameUserPrincipalPrincipal 中定义。

关于c# - PrincipalSearchResult<T> 和 PrincipalSearcher FindAll,为什么 T 必须是 Principal 而不是 UserPrincipal,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/26679819/

10-12 15:52