首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何查找程序集中继承自特定类型C#的所有类型

如何查找程序集中继承自特定类型C#的所有类型
EN

Stack Overflow用户
提问于 2009-08-12 20:01:24
回答 3查看 41.9K关注 0票数 98

如何获取继承自特定其他类型的所有类型的集合?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2009-08-12 20:04:47

类似于:

代码语言:javascript
复制
public IEnumerable<Type> FindDerivedTypes(Assembly assembly, Type baseType)
{
    return assembly.GetTypes().Where(t => baseType.IsAssignableFrom(t));
}

如果你需要处理泛型,那就有点棘手了(例如,传入一个开放的List<>类型,但又期望得到一个从List<int>派生的类型)。否则就很简单了:)

如果你想排除类型本身,你可以很容易地做到:

代码语言:javascript
复制
public IEnumerable<Type> FindDerivedTypes(Assembly assembly, Type baseType)
{
    return assembly.GetTypes().Where(t => t != baseType && 
                                          baseType.IsAssignableFrom(t));
}

请注意,这还允许您指定一个接口并找到实现它的所有类型,而不是像Type.IsSubclassOf那样只使用类。

票数 160
EN

Stack Overflow用户

发布于 2009-08-12 20:06:05

您必须枚举所有类型,并检查每个类型是否继承了您正在寻找的类型。

一些代码,比如this question中的代码,可能对您有用。

票数 1
EN

Stack Overflow用户

发布于 2016-10-25 19:04:07

考虑使用此方法(为PCL编写):

代码语言:javascript
复制
public IEnumerable<Type> FindDerivedTypes( Assembly assembly, Type baseType )
{
        TypeInfo baseTypeInfo = baseType.GetTypeInfo();
        bool isClass = baseTypeInfo.IsClass, isInterface = baseTypeInfo.IsInterface;

        return
            from type in assembly.DefinedTypes
            where isClass ? type.IsSubclassOf( baseType ) :
                  isInterface ? type.ImplementedInterfaces.Contains( baseTypeInfo.AsType() ) : false
            select type.AsType();
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1268397

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档