在给定的程序集中,我想找到具有公共基类但不指定基类的所有类型,例如:
A : Base, IInterface
B : Base, IInterface
C : Base, IInterface
X : Other, IInterface
Y : Other, IInterface
我有 2 组,A,B,C(从 Base 继承(和 X,Y(从其他继承(。Base 和 Other 是抽象的,它们都实现了一个通用接口。
方法签名可以是这样的:
public IEnumerable<IGrouping<Type, IEnumerable<Type>>> FindGroups(Assembly assembly, Type @interface)
{
}
如何创建这些组?
试试这段代码:
public IEnumerable<IGrouping<Type, Type>> FindGroups(Assembly assembly, Type @interface)
{
return assembly.GetTypes()
.Where(t => @interface.IsAssignableFrom(t)
&& !t.IsAbstract
&& t.BaseType != null
&& t.BaseType.IsAbstract)
.Select(t => new {baseType = t.BaseType, type = t})
.GroupBy(x => x.baseType, x => x.type);
}