Type.IsGenericTypeDefinition和Type.ContainsGenericParameters之间的区别

Ste*_*ven 20 .net c# generics reflection

System.Type类型包含属性IsGenericTypeDefinitionContainsGenericParameters.阅读完MSDN文档后,我得出结论,两个属性都存在,以检查类型是开放类型还是封闭类型.

但是,我没有看到两者之间的区别,以及何时想要使用另一个.

Jon*_*Jon 21

Type.ContainsGenericParameters递归的:

var genericList = typeof(List<>);
var listOfSomeUnknownTypeOfList = genericList.MakeGenericType(genericList);
listOfSomeUnknownTypeOfList.IsGenericTypeDefinition;  // => false
listOfSomeUnknownTypeOfList.ContainsGenericParameters; // => true
Run Code Online (Sandbox Code Playgroud)

这里发生的listOfSomeUnknownTypeOfList是不是泛型类型定义本身,因为它的类型参数List<T>对于某些T来说是已知的.但是,因为类型listOfSomeUnknownTypeOfList不完全已知(因为它的类型参数是类型定义)ContainsGenericParameterstrue.


SLa*_*aks 5

ContainsGenericParameters是一个递归版本IsGenericTypeDefinition.

typeof(List<Func<>>).IsGenericTypeDefinition 是假的.