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

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

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

Type.ContainsGenericParameters递归的

 var genericList = typeof(List<>); var listOfSomeUnknownTypeOfList = genericList.MakeGenericType(genericList); listOfSomeUnknownTypeOfList.IsGenericTypeDefinition; // => false listOfSomeUnknownTypeOfList.ContainsGenericParameters; // => true 

这里发生的是listOfSomeUnknownTypeOfList本身不是generics类型定义,因为它的类型参数已知为某些T的List 。但是,因为listOfSomeUnknownTypeOfList的类型不是完全已知的(因为它的类型参数是类型定义) ) ContainsGenericParameterstrue

ContainsGenericParametersIsGenericTypeDefinition的递归版本。

typeof(List>).IsGenericTypeDefinition为false。

IsGenericType下有一个表,试图突出显示一些差异:

IsGenericTypeDefinition属性为true。

定义generics类型。 通过在Type对象上调用MakeGenericType方法来创建构造类型,该对象表示generics类型定义并指定类型参数的数组。

要么:

ContainsGenericParameters属性为true。

示例是具有未分配的类型参数的generics类型,嵌套在generics类型定义或开放构造类型中的类型,或具有ContainsGenericParameters属性为true的类型参数的generics类型。

所以他们并不完全一样。