2011-11-10 10 views
6

は、次のコードを考えてみましょう:System.DirectoryServices.AccountManagement.PrincipalCollection - プリンシパルがユーザーかグループかどうかを確認する方法?

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?   
} 

基本的に私は、メンバーがユーザーであるとグループであるた(メンバーのコレクションに基づいて)されて知りたいです。彼らがどんなタイプであるかに応じて、私は追加のロジックを消しておく必要があります。

答えて

12

簡単:それ以外の場合は、成功した - - 値がnullその後、キャストが失敗した場合

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キーワードを使用することに興味を持っている型にキャスト。もちろん

、別のオプションは、型を取得し、それを検査するために、次のようになります。

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

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

非常に素晴らしいソリューション - ありがとう! –

+1

または 'is'演算子を使用します(例:var result = principalはUserPrincipalです)。おそらく内部的にこれらのオプションのいずれかと同様の処理をしています –

関連する問題