嘿,我有一个问题,检查一个类是否是另一个类的子类。我有一个方法:
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中)是相同的......任何人都可以帮助我吗?
答案 0 :(得分:0)
问题是该行:
toCheck.GetGenericTypeDefinition()
当您通过X
进行检查时,在第二次迭代时,方法调用toCheck.GetGenericTypeDefinition()
将返回FooViewModelBase<>
- 但将其与generic
变量类型{{1}进行比较总是会返回false。
可能的解决方案,在FooViewModelBase<Y>
之前编写:
while