Check if a class is derived from a generic class

前端 未结 16 1645
太阳男子
太阳男子 2020-11-22 09:57

I have a generic class in my project with derived classes.

public class GenericClass : GenericInterface
{
}

public class Test : GenericCla         


        
16条回答
  •  再見小時候
    2020-11-22 10:28

    Added to @jaredpar's answer, here's what I use to check for interfaces:

    public static bool IsImplementerOfRawGeneric(this Type type, Type toCheck)
    {
        if (toCheck.GetTypeInfo().IsClass)
        {
            return false;
        }
    
        return type.GetInterfaces().Any(interfaceType =>
        {
            var current = interfaceType.GetTypeInfo().IsGenericType ?
                        interfaceType.GetGenericTypeDefinition() : interfaceType;
            return current == toCheck;
        });
    }
    
    public static bool IsSubTypeOfRawGeneric(this Type type, Type toCheck)
    {
        return type.IsInterface ?
              IsImplementerOfRawGeneric(type, toCheck)
            : IsSubclassOfRawGeneric(type, toCheck);
    }
    

    Ex:

    Console.WriteLine(typeof(IList<>).IsSubTypeOfRawGeneric(typeof(IList))); // true
    

提交回复
热议问题