问题描述
publicclassA<T>{}publicclassB:A<int>{}publicclassC:B{}如何才能知道C是从A<T>继承的。boolb=typeof(C).IsAssignableFrom(typeof(A<>));//不行boolb=typeof(C).IsAssignableFrom(typeof(A<>).GetGenericTypeDefinition());//也不行那位兄弟对泛型熟悉,帮忙看一下。
解决方案
解决方案二:
上面有点错误。如下:----------------------------------------publicclassA<T>{}publicclassB:A<int>{}publicclassC:B{}如何才能知道C是从A<T>继承的。boolb=typeof(A<int>).IsAssignableFrom(typeof(C));//可以boolb=typeof(A<>).IsAssignableFrom(typeof(C));//不行那位兄弟对泛型熟悉,帮忙看一下。
解决方案三:
returnValue=instance.IsAssignableFrom(c)C#publicvirtualboolIsAssignableFrom(Typec)参数c与当前的Type进行比较的Type。返回值如果c和当前Type表示同一类型,当前Type在c的继承层次结构中,当前Type是c实现的接口,或者c是泛型类型参数且当前Type表示c的约束之一,则为true。如果上述情况都不符合,或者c为空引用(在VisualBasic中为Nothing),则为false。msdn不是写的很清楚了么,只要调用IsAssignableFrom的type是参数type的父类,接口或者约束就可以返回true啊
解决方案四:
这个方法应该是判断当前type的变量是否可以引用参数的实例
解决方案五:
范型只有和具体的泛型参数结合,才可以成为具体的类型
解决方案六:
IsGenericType也可以直接判断