c# - Reflection: How to create a precisely filtered list of the Assembly's types? -


foreach (var item in assembly.getexecutingassembly().gettypes()                              .where(x => x.basetype == typeof(item))) {     combobox1.items.add(item); } combobox1.displaymember = "name"; 

can modified list include classes derived 'item' if 2 or more times removed? (ie: x.basetype.basetype == typeof(item) etc.)

also, done filter out abstract classes?

a simple approach use isassignablefrom.

foreach (var item in assembly.getexecutingassembly().gettypes()                              .where(x => typeof(item).isassignablefrom(x) && !x.isabstract)) {     //handle each item } 

assuming "handle each item console.writeline(item), , had class structure:

class itembase {} class item : itembase {} class superitem : item {} abstract class supersuperitem : superitem{} class ultimateitem : supersuperitem {} 

the output be:

item

superitem

ultimateitem

note in case isassignablefrom returns true itself, can omit adding && x != typeof(item) where clause.


Comments