假设我们有一系列类型:
var types = new[]
{
typeof(IEnumerable<int>),
typeof(ICollection<int>),
typeof(Stack<int>),
typeof(IList<int>),
typeof(int[])
};
如果考虑类型层次结构,可以想象:
IEnumerable<int>
|
ICollection<int>
/ \
Stack<int> IList<int>
\
int[]
这不是我的实际问题,但它归结为以下问题:
给定一组所有代表某个树(具有单个根)的类型,如何获得包含原始集合中叶子类型的子集合。
因此,对于上面的集合,叶子将是Stack<int>
和int[]
。
如何以优雅的方式做到这一点?任何帮助将不胜感激!
在我的问题中,我正在处理彼此派生的实际类型,创建一个树。例如,我可以:
class Root {}
class LeftChild : Root {}
class RightChild : Root {}
class LeftChildChild : LeftChild {}
在这种情况下,我想提出LeftChildChild
和RightChild
。