代码之家  ›  专栏  ›  技术社区  ›  aceinthehole

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

  •  105
  • aceinthehole  · 技术社区  · 17 年前

    4 回复  |  直到 17 年前
        1
  •  158
  •   Jon Skeet    15 年前

    public IEnumerable<Type> FindDerivedTypes(Assembly assembly, Type baseType)
    {
        return assembly.GetTypes().Where(t => baseType.IsAssignableFrom(t));
    }
    

    List<> List<int>

    public IEnumerable<Type> FindDerivedTypes(Assembly assembly, Type baseType)
    {
        return assembly.GetTypes().Where(t => t != baseType && 
                                              baseType.IsAssignableFrom(t));
    }
    

    Type.IsSubclassOf

        2
  •  28
  •   Tim Murphy    15 年前

    以下方法将获取继承类型的类型集合。

    public IEnumerable<Type> FindSubClassesOf<TBaseType>()
    {   
        var baseType = typeof(TBaseType);
        var assembly = baseType.Assembly;
    
        return assembly.GetTypes().Where(t => t.IsSubclassOf(baseType));
    }
    

    Public Function FindSubClasses(Of TBaseType)() As IEnumerable(Of Type)
    
        Dim baseType = GetType(TBaseType)
        Dim assembly = baseType.Assembly
    
        Return From t In assembly.GetTypes() 
               Where t.IsSubClassOf(baseType) 
               Select t
    
    End Function
    

        3
  •  1
  •   Community Mohan Dere    9 年前

    您必须枚举所有类型,并检查每种类型是否继承了您要查找的类型。

    this question 可能对你有用。

        4
  •  1
  •   HappyNomad    9 年前

    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();
    }