1、通过IsAssignableFrom()方法判断的问题
var type1 = typeof(List<>); var type2 = typeof(IEnumerable<>); //return false type2.IsAssignableFrom(type1); //通过IsAssignableFrom()方法判断,方法返回是false,判断不出来它们之间的继承关系。
2、通过自定义方法判断它们之间的继承关系
public static bool IsAssignableToOpenGenericType(Type givenType, Type genericType) { var interfaceTypes = givenType.GetInterfaces(); foreach (var it in interfaceTypes) { if (it.IsGenericType && it.GetGenericTypeDefinition() == genericType) return true; } if (givenType.IsGenericType && givenType.GetGenericTypeDefinition() == genericType) return true; Type baseType = givenType.BaseType; if (baseType == null) return false; return IsAssignableToGenericType(baseType, genericType); } //IsAssignableToOpenGenericType()使用示例代码 var typ1 = typeof(List<>); var typ2 = typeof(IEnumerable<>); //true, List<>的类型定义包含一个IEnumerable<> Console.WriteLine(IsAssignableToOpenGenericType(typ1, typ2)); //false,IEnumerable<>的类型定义不包含List<> Console.WriteLine(IsAssignableToOpenGenericType(typ2, typ1));