Мне интересно, как проверить, является ли данный тип закрытым версия открытого типа. Например
public bool IsGenericList(Type source) { return (source.IsGenericType && /*here goes the manipulation on source type*/ == typeof(List<>)); }
Попробуйте Type.GetGenericTypeDefinition:
Type.GetGenericTypeDefinition
public bool IsGenericList(Type source) { return source.IsGenericType && source.GetGenericTypeDefinition() == typeof(List<>); }