如何获取继承自特定其他类型的所有类型的集合?
发布于 2009-08-12 20:04:47
类似于:
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
那样只使用类。
发布于 2009-08-12 20:06:05
您必须枚举所有类型,并检查每个类型是否继承了您正在寻找的类型。
一些代码,比如this question中的代码,可能对您有用。
发布于 2016-10-25 19:04:07
考虑使用此方法(为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();
}
https://stackoverflow.com/questions/1268397
复制相似问题