【发布时间】:2010-01-25 15:37:39
【问题描述】:
我有一个程序集,我想列出从特定类/接口继承的所有类。
我该怎么做?
【问题讨论】:
标签: c#
我有一个程序集,我想列出从特定类/接口继承的所有类。
我该怎么做?
【问题讨论】:
标签: c#
类似:
public static IEnumerable<Type> GetSubtypes(Assembly assembly, Type parent)
{
return assembly.GetTypes()
.Where(type => parent.IsAssignableFrom(type));
}
这对于简单的情况很好,但是当您想找到“所有类型为任何T 实现IEnumerable<T>”等时,它变得更加“有趣”(阅读:棘手)。
(正如亚当所说,你可以很容易地把它变成一个扩展方法。这取决于你是否认为你会重用它——扩展方法必须在非嵌套的静态类中是很痛苦的...... )
【讨论】:
IEnumerable<T> 或 any IEnumerable<T> 的实现(即是否指定了 T?)至于扩展方法......我不倾向于编写许多顶级静态类。只为扩展方法创建一个有点矫枉过正。
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;
}
【讨论】: