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

时间:2017-08-10 11:50:34

标签: c# reflection

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

A : Base, IInterface
B : Base, IInterface
C : Base, IInterface
X : Other, IInterface
Y : Other, IInterface

我有两组,A,B,C(继承自Base)和X,Y(继承自Other)。 Base和Other是抽象的,都实现了一个通用的接口。

方法签名可以是:

public IEnumerable<IGrouping<Type, IEnumerable<Type>>> FindGroups(Assembly assembly, Type @interface)
{
}

如何创建这些群组?

1 个答案:

答案 0 :(得分:2)

试试这段代码:

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