2009-12-16 28 views

Trả lời

10
List<Type> list = new List<Type>(); 
foreach (Assembly ass in AppDomain.CurrentDomain.GetAssemblies()) 
{ 
    foreach (Type t in ass.GetExportedTypes()) 
    { 
     if (t.IsEnum) 
     { 
      list.Add(t); 
     } 
    } 
} 

Điều đó sẽ làm, cho tất cả các assembly được nạp bởi AppDomain hiện nay, để có được chỉ từ hội xác định, chỉ cần điều chỉnh ;-)

+1

Phần hài hước (theo phiên âm): "chỉ cần điều chỉnh" :) –

3

Giả sử bạn đã danh sách các Assembly đối tượng bạn muốn kiểm tra:

IEnumerable<Assembly> assemblies; // assign the assemblies you want to check here 

foreach (Assembly a in assemblies) { 
    foreach (Type t in assembly.GetTypes()) { 
     if (t.IsEnum) { 
      // found an enum! Do whatever... 
     } 
    } 
} 
2

Bạn sẽ có thể sử dụng Assembly.GetTypes() để có được tất cả các loại để lắp ráp các. Đối với mỗi loại, bạn có thể sử dụng thuộc tính Type.IsEnum để xem đó có phải là enum hay không.

3

Bạn cũng có thể sử dụng LINQ để trả về một danh sách tất cả các loại enum từ một danh sách các hội đồng.

IEnumerable<Assembly> assemblies; 
// give assemblies some value 
var enums = from assembly in assemblies let types = assembly.GetTypes() from type in types where type.IsEnum select type; 

enums sẽ thuộc loại IEnumerable.

2

Dưới đây là một giải pháp thiết thực hơn:

AppDomain.CurrentDomain.GetAssemblies() 
    .SelectMany(a => a.GetTypes()) 
    .Where(t => t.IsEnum) 
Các vấn đề liên quan