2010-03-19 32 views
6

Tôi đang cố gắng kiểm tra nội dung của một hội đồng và tìm tất cả các lớp trong đó được trực tiếp hoặc gián tiếp có nguồn gốc từ Windows.Forms.UserControl.Bắt tất cả các loại từ một hội đồng có nguồn gốc từ một lớp cơ sở

tôi đang làm điều này:

Assembly dll = Assembly.LoadFrom(filename); 
var types = dll.GetTypes().Where(x => x.BaseType == typeof(UserControl)); 

Nhưng nó được đưa ra một danh sách trống vì không ai trong số các lớp học trực tiếp mở rộng UserControl. Tôi không biết đủ về sự phản chiếu để làm điều đó một cách nhanh chóng, và tôi không muốn viết một hàm đệ quy nếu tôi không phải làm vậy.

Trả lời

17

Bạn nên sử dụng Type.IsSubclassOf này thay vì:

var types = dll.GetTypes().Where(x => x.IsSubclassOf(typeof(UserControl))); 
+0

Thats những gì tôi cần. Cảm ơn. – captncraig

1

Bạn có thể sử dụng:

var assembly = Assembly.Load(filename); 
    var types = assembly.GetTypes().Where((type) => typeof(UserControl).IsAssignableFrom(type)); 
Các vấn đề liên quan