The System.Type type contains the properties IsGenericTypeDefinition and ContainsGenericParameters. After reading the MSDN documentation I conclude that both properties exist to to check whether a type is an open or closed generic type.
However, I fail to see what the difference is between the two, and when you want to use one over the other.
Type.ContainsGenericParametersis recursive:What happens here is that
listOfSomeUnknownTypeOfListis not a generic type definition itself because its type parameter is known to be aList<T>for some T. However, since the type oflistOfSomeUnknownTypeOfListis not exactly known (because its type argument is a type definition)ContainsGenericParametersistrue.