在给定程序集中按公共基类对类型进行分组



在给定的程序集中,我想找到具有公共基类但不指定基类的所有类型,例如:

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

最新更新