2011-11-10 24 views
6

Xét đoạn mã sau:System.DirectoryServices.AccountManagement.PrincipalCollection - cách kiểm tra xem hiệu trưởng là người dùng hay nhóm?

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

Về cơ bản những gì tôi muốn biết là (dựa trên việc thu thập các thành viên) mà các thành viên là người sử dụng và là các nhóm. Tùy thuộc vào loại họ đang có, tôi cần phải bắn ra logic bổ sung.

Trả lời

12

dễ dàng:

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

Về cơ bản, bạn chỉ cần đúc để một loại mà bạn đang quan tâm trong việc sử dụng từ khóa as - nếu giá trị là null sau đó các diễn viên thất bại - nếu không nó đã thành công.

Tất nhiên, tùy chọn khác sẽ được để có được các loại và kiểm tra nó:

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

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

giải pháp rất đẹp - cảm ơn! –

+1

hoặc sử dụng toán tử 'is' (ví dụ: var result = principal là UserPrincipal), có thể là nội bộ làm một cái gì đó tương tự như một trong các tùy chọn này –

Các vấn đề liên quan