by Jim
Mar 26, 2009 6:42 PM
It’s trivially easy to check if your type subclasses some other type with Type.IsSubclassOf(). But what if that subclass is a generic one? IsSubclassOf() doesn’t work for that.
Enter the IsSubclassOfGeneric() extension method. I’m pretty new to extension methods, and haven’t found a lot of practical uses for then yet, but I like this one. We’re using reflection and generics a lot in my current project and this has been nice in a couple of places…
/// <summary>
/// Check if a type subclasses a generic type
/// </summary>
/// <param name="genericType">The suspected base class</param>
/// <returns>True if this is indeed a subclass of the given generic type</returns>
public static bool IsSubclassOfGeneric(this Type type, Type genericType)
{
Type baseType = type.BaseType;
while (baseType != null)
{
if (baseType.IsGenericType &&
baseType.GetGenericTypeDefinition() == genericType)
return true;
else
baseType = baseType.BaseType;
}
return false;
}