2010-03-19 39 views
6

我想检查程序集的内容并找到它中直接或间接从Windows.Forms.UserControl派生的所有类。获取从基类派生的所有类型

我这样做:

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

但它给一个空列表,因为没有课的直接扩展用户控件。我不太了解反射速度,如果不需要,我宁愿不写递归函数。

回答

17

您应该使用Type.IsSubclassOf这个代替:

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

,这是我需要的东西。谢谢。 – captncraig 2010-03-19 21:35:48

1

您可以使用:

var assembly = Assembly.Load(filename); 
    var types = assembly.GetTypes().Where((type) => typeof(UserControl).IsAssignableFrom(type)); 
相关问题