2009-06-04 28 views
58

Làm thế nào tôi có thể nhận được tất cả các lớp trong một không gian tên trong C#?Làm thế nào tôi có thể nhận được tất cả các lớp trong một không gian tên?

+1

có thể trùng lặp [Lấy tất cả các lớp của một tên cụ thể space] (http://stackoverflow.com/questions/343869/taking-out-all-classes-of-a-specific-namespace) – nawfal

+1

Có thể trùng lặp của [Bắt tất cả các loại trong một không gian tên thông qua sự phản ánh] (https: // stackoverflow.com/questions/79693/getting-all-types-in-a-namespace-via-reflection) – Liam

Trả lời

108

Bạn sẽ cần làm điều đó "ngược"; liệt kê tất cả các loại trong một lắp ráp và sau đó kiểm tra không gian tên của từng loại:

using System.Reflection; 
private Type[] GetTypesInNamespace(Assembly assembly, string nameSpace) 
{ 
    return 
     assembly.GetTypes() 
       .Where(t => String.Equals(t.Namespace, nameSpace, StringComparison.Ordinal)) 
       .ToArray(); 
} 

Ví dụ về sử dụng:

Type[] typelist = GetTypesInNamespace(Assembly.GetExecutingAssembly(), "MyNamespace"); 
for (int i = 0; i < typelist.Length; i++) 
{ 
    Console.WriteLine(typelist[i].Name); 
} 

Đối với bất cứ điều gì trước khi Net 2.0 nơi Assembly.GetExecutingAssembly() không có sẵn, bạn sẽ cần một giải pháp nhỏ để có được lắp ráp:

Assembly myAssembly = typeof(<Namespace>.<someClass>).GetTypeInfo().Assembly; 
Type[] typelist = GetTypesInNamespace(myAssembly, "<Namespace>"); 
for (int i = 0; i < typelist.Length; i++) 
{ 
    Console.WriteLine(typelist[i].Name); 
} 
+2

.Where (t => String.Equals (t.Namespace, nameSpace, StringComparison.Ordinal) – abatishchev

+6

Ngoài ra, giữ trong nhớ rằng Assembly! = namespace - một số không gian tên được lan truyền trên nhiều assembly. – Bevan

+1

và tại sao không trả lại chỉ một số điện thoại IE2 có thể ? Hơn nữa, bạn có một sự liệt kê giữa các kết quả, cũng 'foreach' thay vì 'for' là tốt hơn, tôi nghĩ vậy. – abatishchev

0

Với Reflection bạn cal lặp qua tất cả các loại trong một assembly. Một loại có một tài sản Namespace mà bạn sử dụng để lọc chỉ không gian tên bạn quan tâm.

5

Bạn sẽ cần phải cung cấp thêm một chút thông tin ...

Bạn có nghĩa là bằng cách sử dụng Reflection. Bạn có thể lặp thông qua một hội Manifest và có được một danh sách các loại sử dụng

System.Reflection.Assembly myAssembly = Assembly.LoadFile(""); 

    myAssembly.ManifestModule.FindTypes() 

Nếu nó chỉ là trong Visual Studio, bạn chỉ có thể có được danh sách trong cửa sổ IntelliSense, hoặc bằng cách mở Object Browser (CTRL + W , J)

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