.NET(C#)判断泛型类型(List<>)和泛型接口(IEnumerable<>)的继承关系代码
时间:2022-10-07
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));
特别声明:本站部分内容收集于互联网是出于更直观传递信息的目的。该内容版权归原作者所有,并不代表本站赞同其观点和对其真实性负责。如该内容涉及任何第三方合法权利,请及时与824310991@qq.com联系,我们会及时反馈并处理完毕。