Reputation: 23118
I am trying to examine the contents of an assembly and find all classes in it that are directly or indirectly derived from Windows.Forms.UserControl.
I am doing this:
Assembly dll = Assembly.LoadFrom(filename);
var types = dll.GetTypes().Where(x => x.BaseType == typeof(UserControl));
But it is giving an empty list because none of the classes directly extend UserControl. I don't know enough about reflection to do it quickly, and I'd rather not write a recursive function if I don't have to.
Upvotes: 7
Views: 6620
Reputation: 1469
You can use :
var assembly = Assembly.Load(filename);
var types = assembly.GetTypes().Where((type) => typeof(UserControl).IsAssignableFrom(type));
Upvotes: 1
Reputation: 158379
You should use Type.IsSubclassOf
this instead:
var types = dll.GetTypes().Where(x => x.IsSubclassOf(typeof(UserControl)));
Upvotes: 20