如何在任意层次结构中查找最具体的类型

时间:2017-02-09 12:12:31

标签: c# class hierarchy

假设我们有一系列类型:

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 {}

在这种情况下,我想提出LeftChildChildRightChild

1 个答案:

答案 0 :(得分:1)

在我看来,Type.IsAssignableFrom是你的朋友。您需要的类型不能从集合中的任何其他类型分配:

jmeter