Jon*_*eet 146
就像是:
public IEnumerable<Type> FindDerivedTypes(Assembly assembly, Type baseType)
{
return assembly.GetTypes().Where(t => baseType.IsAssignableFrom(t));
}
Run Code Online (Sandbox Code Playgroud)
如果你需要处理泛型,那会变得有些棘手(例如传入open List<>类型但希望返回一个派生类型List<int>).否则它虽然很简单:)
如果要排除类型本身,可以轻松地完成:
public IEnumerable<Type> FindDerivedTypes(Assembly assembly, Type baseType)
{
return assembly.GetTypes().Where(t => t != baseType &&
baseType.IsAssignableFrom(t));
}
Run Code Online (Sandbox Code Playgroud)
请注意,这还允许您指定一个接口并查找实现它的所有类型,而不是像以前那样只使用类Type.IsSubclassOf.
Tim*_*phy 26
以下方法将获取继承类型的类型集合.
C#
public IEnumerable<Type> FindSubClassesOf<TBaseType>()
{
var baseType = typeof(TBaseType);
var assembly = baseType.Assembly;
return assembly.GetTypes().Where(t => t.IsSubclassOf(baseType));
}
Run Code Online (Sandbox Code Playgroud)
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
Run Code Online (Sandbox Code Playgroud)
如果您需要包含实现接口的类型,请参阅@Jon Skeet的答案.
| 归档时间: |
|
| 查看次数: |
35974 次 |
| 最近记录: |