2011-11-10 17 views
6

Aşağıdaki kodu düşünün:System.DirectoryServices.AccountManagement.PrincipalCollection - asıl kullanıcı veya grup olup olmadığını nasıl kontrol edersiniz?

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

Temelde ben üye kullanıcısı olan ve gruplardır hangilerinin (üye koleksiyonu dayanarak) olduğunu bilmek istiyorum. Ne tür olduklarına bağlı olarak, ek mantığı ateşlemem gerek.

cevap

12

Kolay:

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

Temel olarak, sadece as anahtar kelimesini kullanarak ilgilendiğiniz bir tür atama - değeri daha sonra null ise dökme başarısız oldu - aksi takdirde başarılı oldu. Tabii

, başka bir seçenek türünü almak ve incelemek olacaktır:

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

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

Çok güzel çözüm - teşekkürler! –

+1

veya 'is' operatörünü (örn. Var sonuç = asıl KullanıcıPrincipal) kullanın; bu, muhtemelen içsel olarak bu seçeneklerden birine benzer bir şey yapıyordur –

İlgili konular