我正在尝试检查程序集的内容,并查找其中直接或间接派生自Windows.Forms.UserControl的所有类。
我这样做:
Assembly dll = Assembly.LoadFrom(filename);
var types = dll.GetTypes().Where(x => x.BaseType == typeof(UserControl));
但是它给出了一个空列表,因为没有类直接扩展UserControl。我不太了解反射快速完成它,如果我不需要,我宁愿不写一个递归函数。
答案 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));