从派生自基类的程序集中获取所有类型

时间:2010-03-19 21:29:09

标签: c# reflection

我正在尝试检查程序集的内容,并查找其中直接或间接派生自Windows.Forms.UserControl的所有类。

我这样做:

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

但是它给出了一个空列表,因为没有类直接扩展UserControl。我不太了解反射快速完成它,如果我不需要,我宁愿不写一个递归函数。

2 个答案:

答案 0 :(得分:17)

您应该使用Type.IsSubclassOf代替:

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

答案 1 :(得分:1)

您可以使用:

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