1

这个问题与如何找到基类的直接后代类型相反?

如果这是我拥有的继承层次结构,

class Base
{

}



class Derived1 : Base
{

}

class Derived1A : Derived1
{

}

class Derived1B : Derived1
{

}



class Derived2 : Base
{

}

我需要一种机制来查找Base特定程序集中的所有子类型,这些子类型位于继承树的末尾。换句话说,

SubTypesOf(typeof(Base)) 

应该给我

-> { Derived1A, Derived1B, Derived2 }
4

1 回答 1

1

这就是我想出的。不确定是否存在一些更优雅/有效的解决方案..

public static IEnumerable<Type> GetLastDescendants(this Type t)
{
    if (!t.IsClass)
        throw new Exception(t + " is not a class");

    var subTypes = t.Assembly.GetTypes().Where(x => x.IsSubclassOf(t)).ToArray();
    return subTypes.Where(x => subTypes.All(y => y.BaseType != x));
}

为了完整起见,我将重新发布此处给出的直系后代的答案

public static IEnumerable<Type> GetDirectDescendants(this Type t)
{
    if (!t.IsClass)
        throw new Exception(t + " is not a class");

    return t.Assembly.GetTypes().Where(x => x.BaseType == t);
}
于 2013-08-28T12:27:41.687 回答