C# 列出从特定类/接口继承的所有类

C# 列出从特定类/接口继承的所有类,c#,C#,我有一个程序集,我想列出从特定类/接口继承的所有类 我该怎么做?类似于: public static IEnumerable<Type> GetSubtypes(Assembly assembly, Type parent) { return assembly.GetTypes() .Where(type => parent.IsAssignableFrom(type)); } 公共静态IEnumerable GetSubtype

我有一个程序集,我想列出从特定类/接口继承的所有类

我该怎么做?

类似于:

public static IEnumerable<Type> GetSubtypes(Assembly assembly, Type parent)
{
    return assembly.GetTypes()
                   .Where(type => parent.IsAssignableFrom(type));
}
公共静态IEnumerable GetSubtype(程序集,类型父级)
{
返回assembly.GetTypes()
.Where(type=>parent.IsAssignableFrom(type));
}
对于简单的情况来说,这很好,但是如果您想找到“所有类型都实现了
IEnumerable
,对于任何
T
”等,它会变得更“有趣”(阅读:棘手)

(正如Adam所说,您可以很容易地将其作为扩展方法。这取决于您是否认为您将重用它-扩展方法必须位于非嵌套的静态类中是一件痛苦的事情…)

公共静态IEnumerable GetTypesThatInheritFrom(此程序集asm)
{
var types=来自asm.GetTypes()中的t
其中,typeof(T).IsAssignableFrom(T)
选择t;
返回类型;
}

我像往常一样被抓了。还不如把它变成一个扩展方法。@Jon,如果“您想找到”所有实现IEnumerable for any T的类型“等等”,您会怎么做?您还说过“扩展方法必须在非嵌套的静态类中,这是一件痛苦的事情”。为什么?你经常使用嵌套类吗。谢谢。@Joan:我需要知道它是在寻找一个特定的
IEnumerable
的实现还是任何
IEnumerable
(即是否指定了T?)的扩展方法。。。我不想写很多顶级静态类。仅为扩展方法创建一个有点过分。我做了如下的轻微更正:)private IEnumerable GetSubType(汇编asm,类型parent){return asm.GetTypes().Where(Type=>parent.IsAssignableFrom(Type));}抱歉,我不知道如何在注释中执行代码块。@Jon:好吧,现在不用谢我了。我以为我已经得到了我想要的,但仍然没有工作:(我应该说我做了一个改变。那样的话,听起来就不会像我做了什么。
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;
}