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

时间:2014-10-31 16:59:20

标签: 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);
    }
}

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

using (PrincipalSearchResult<UserPrincipal> results = user_searcher.FindAll())

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

谢谢。

2 个答案:

答案 0 :(得分:7)

实际上foreach将为您投射枚举值,以便您可以执行此操作

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

假设在Name以及UserPrincipal中定义了Principal

答案 1 :(得分:3)

您可以尝试添加Cast。改变

PrincipalSearchResult<Principal> results = user_searcher.FindAll()

var results = user_searcher.FindAll().Cast<UserPrincipal>()