Type.ContainsGenericParameters
is recursive:
var genericList = typeof(List<>);
var listOfSomeUnknownTypeOfList = genericList.MakeGenericType(genericList);
listOfSomeUnknownTypeOfList.IsGenericTypeDefinition; // => false
listOfSomeUnknownTypeOfList.ContainsGenericParameters; // => true
What happens here is that listOfSomeUnknownTypeOfList
is not a generic type definition itself because its type parameter is known to be a List<T>
for some T. However, since the type of listOfSomeUnknownTypeOfList
is not exactly known (because its type argument is a type definition) ContainsGenericParameters
is true
.
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…