To discover if a type is a collection you have to get the interfaces it implements using GetInterfaces(), only look at generic interfaces using IsGenericType and then get the generic type (i.e. going from IList<String> to IList<>) using GetGenericTypeDefinition():