我只是好奇:
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>
类型。还有更好的方法吗?
谢谢。
答案 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>()