检查class是否是另一个类的子类

时间:2014-12-18 05:29:03

标签: c# .net

嘿,我有一个问题,检查一个类是否是另一个类的子类。我有一个方法:

private bool IsSubclassOfRawGeneric(Type generic, Type toCheck)
    {
        while (toCheck != null && toCheck != typeof(object)) {
            var cur = toCheck.IsGenericType ? toCheck.GetGenericTypeDefinition() : toCheck;
            if (generic == cur) {
                return true;
            }
            toCheck = toCheck.BaseType;
        }
        return false;
    }

我要检查的实例是X : FooViewModelBase<Y>类型,我将typeof(FooViewModelBase<Y>)作为第一个参数传递。但仍然比较返回错误,我不明白为什么,类型的名称和所有类型(在循环2中)是相同的......任何人都可以帮助我吗?

1 个答案:

答案 0 :(得分:0)

问题是该行:

toCheck.GetGenericTypeDefinition()

当您通过X进行检查时,在第二次迭代时,方法调用toCheck.GetGenericTypeDefinition()将返回FooViewModelBase<> - 但将其与generic变量类型{{1}进行比较总是会返回false。

可能的解决方案,在FooViewModelBase<Y>之前编写:

while