Làm cách nào để lấy tất cả các lớp trong một vùng tên trong C #?
Làm cách nào để lấy tất cả các lớp trong một vùng tên trong C #?
Câu trả lời:
Bạn sẽ cần phải làm điều đó "ngược"; liệt kê tất cả các kiểu trong một assembly và sau đó kiểm tra không gian tên của mỗi kiểu:
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ề cách 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 kỳ thứ gì trước khi .Net 2.0 Assembly.GetExecutingAssembly()
không khả dụng, bạn sẽ cần một giải pháp nhỏ để có được assembly:
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);
}
Bạn sẽ cần cung cấp thêm một chút thông tin ...
Ý bạn là bằng cách sử dụng Reflection. Bạn có thể lặp qua một Bản kê khai hợp ngữ và nhận danh sách các loại bằng cách sử dụng
System.Reflection.Assembly myAssembly = Assembly.LoadFile("");
myAssembly.ManifestModule.FindTypes()
Nếu đó chỉ là trong Visual Studio, bạn chỉ có thể lấy danh sách trong cửa sổ intellisense hoặc bằng cách mở Trình duyệt đối tượng (CTRL + W, J)
Với Reflection, bạn có thể lặp lại tất cả các kiểu trong một assembly. Một kiểu có thuộc tính Không gian tên mà bạn sử dụng để lọc chỉ vùng tên mà bạn quan tâm.