在给定的程序集中,我想找到所有具有公共基类但没有指定基类的类型,例如:
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)
{
}
如何创建这些群组?
答案 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);
}