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

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

我这样做:

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

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

你应该使用Type.IsSubclassOf代替:

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

您可以使用 :

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