C# PrincipalSearchResult<;T>;有了PrincipalSearcher FindAll,为什么不必是Principal而不是UserPrincipal

C# PrincipalSearchResult<;T>;有了PrincipalSearcher FindAll,为什么不必是Principal而不是UserPrincipal,c#,directoryservices,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 = tru

我只是好奇:

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);
    }
}
List aduser=new List();
使用(PrincipalContext principle\u context=newPrincipalContext(ContextType.Domain,“MYDOMAIN”))
使用(UserPrincipal user\u principal=newuserprincipal(principal\u context){Enabled=true,Name=“*”,EmailAddress=“*”})
使用(PrincipalSearcher用户\搜索者=新PrincipalSearcher(用户\主体))
使用(PrincipalSearchResult results=user\u search.FindAll())
{
foreach(结果中的主要p)
{
Add(p.Name++(UserPrincipal)p.EmailAddress);
}
}
…有没有办法避免在这里发布我的结果?我想做一些事情,比如:

using (PrincipalSearchResult<UserPrincipal> results = user_searcher.FindAll())
使用(PrincipalSearchResult results=user\u search.FindAll())
…这样我的搜索结果将是我需要的类型,但FindAll方法似乎只允许使用
类型。有更好的办法吗


谢谢。

您可以尝试添加
演员阵容。改变

PrincipalSearchResult<Principal> results = user_searcher.FindAll()
PrincipalSearchResult results=user\u search.FindAll()

var results=user\u searcher.FindAll().Cast()

实际上
foreach
将为您强制转换枚举值,以便您可以执行此操作

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

假设
Name
是在
UserPrincipal
以及
Principal
中定义的,那么简单。就这样。非常感谢。我知道这是一个老问题,但我还想直接回答问题标题:因为
T
可以是
UserPrincipal
ComputerPrincipal
,也可以是
GroupPrincipal
。在您的情况下,您可能知道它将只返回
UserPrincipal
对象,但
PrincipalSearcher
无法静态地知道这一点。因为问题的设置方式帮助我快速实现了AD查询:)
foreach (UserPrincipal p in results)
{
    ADUsers.Add(p.Name + " " + p.EmailAddress);
}