我有一个程序集,我想列出从特定类/接口继承的所有类。
我该怎么做?
答案 0 :(得分:7)
类似的东西:
public static IEnumerable<Type> GetSubtypes(Assembly assembly, Type parent)
{
return assembly.GetTypes()
.Where(type => parent.IsAssignableFrom(type));
}
这对于简单的情况来说很好,但是当你想要找到“所有IEnumerable<T>
等T
的类型”时,它变得更“有趣”(阅读:棘手)。
(正如Adam所说,你可以很容易地将它作为一种扩展方法。这取决于你是否认为你会重用它 - 扩展方法必须在非嵌套静态类中是一种痛苦...... )
答案 1 :(得分:3)
public static IEnumerable<Type> GetTypesThatInheritFrom<T>(this Assembly asm)
{
var types = from t in asm.GetTypes()
where typeof(T).IsAssignableFrom(t)
select t;
return types;
}