首页 .Net .NET(C#)判断泛型类型(List<>)和泛型接口(IEnumerable<>)的继承关系代码

.NET(C#)判断泛型类型(List<>)和泛型接口(IEnumerable<>)的继承关系代码

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联系,我们会及时反馈并处理完毕。