public class b: a<int> {}
public static bool IsGenericA(object instance)
Type t = instance.GetType();
while(t.BaseType != typeof(object))
return t.IsGenericType && t.GetGenericTypeDefinition() == typeof(a<>);
public static bool IsNonGenericA(object instance)
Type t = instance.GetType();
while(t.BaseType != null && t.BaseType != typeof(object))
public static void PrintForInstance(object instance)
Console.WriteLine("{0}'s {1}", instance.GetType(), IsGenericA(instance)?"root is a<T>":(IsNonGenericA(instance)?"root is a":"root is not a or a<T>"));
public static void Main()