System.DirectoryServices.AccountManagement.PrincipalCollection - 如何检查Principal是用户还是组?

6
请考虑以下代码:
GroupPrincipal gp = ... // gets a reference to a group

foreach (var principal in gp.Members)
 {
       // How can I determine if principle is a user or a group?         
 }

我想知道(基于成员集合),哪些成员是用户,哪些是组。根据它们的类型,我需要触发额外的逻辑。

1个回答

13

简单:

foreach (var principal in gp.Members)
{
       // How can I determine if principle is a user or a group?         
    UserPrincipal user = (principal as UserPrincipal);

    if(user != null)   // it's a user!
    {
     ......
    }
    else
    {
        GroupPrincipal group = (principal as GroupPrincipal);

        if(group != null)  // it's a group 
        {
           ....
        }
    }
}

基本上,你只需使用 as 关键字将其转换为你感兴趣的类型 - 如果该值是 null,则转换失败,否则成功。

当然,另一个选项是获取类型并检查:

foreach (var principal in gp.Members)
{
    Type type = principal.GetType();

    if(type == typeof(UserPrincipal))
    {
      ...
    }
    else if(type == typeof(GroupPrincipal))
    {
     .....
    }
}

1
或者使用“is”运算符(例如,var result = principal is UserPrincipal),它可能在内部执行类似于这些选项之一的操作。 - Christopher King

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接