2011-11-10 8 views
6

Si consideri il seguente codice:System.DirectoryServices.AccountManagement.PrincipalCollection - come verificare se l'entità è un utente o un gruppo?

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

Fondamentalmente quello che voglio sapere è (basato sulla raccolta membri), che i membri sono utenti e quali sono i gruppi. A seconda del tipo in cui si trovano, ho bisogno di attivare una logica aggiuntiva.

risposta

12

Facile:

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 
     { 
      .... 
     } 
    } 
} 

Fondamentalmente, è solo il cast a un tipo che ti interessa utilizzando la parola chiave as - se il valore è null poi il cast fallito - altrimenti è riuscito.

Naturalmente, un'altra opzione potrebbe essere quella di ottenere il tipo e controllarla:

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

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

Molto bella soluzione - grazie! –

+1

o utilizzare l'operatore 'is' (ad esempio var result = principal è UserPrincipal), che probabilmente sta eseguendo internamente qualcosa di simile a una di queste opzioni –

Problemi correlati