Answers:
就像是:
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。
IsAssignableFrom应该也可以。特别是我的版本也可以处理接口。你测试我的代码了吗?我的答案在什么情况下失败?
                    以下方法将获取继承一个类型的类型的集合。
C#
public IEnumerable<Type> FindSubClassesOf<TBaseType>()
{   
    var baseType = typeof(TBaseType);
    var assembly = baseType.Assembly;
    return assembly.GetTypes().Where(t => t.IsSubclassOf(baseType));
}VB.NET
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如果您需要包括实现接口的类型,请参见@Jon Skeet的答案。
考虑使用此方法(为PCL编写):
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();
}