Ste*_*ven 20 .net c# generics reflection
该System.Type
类型包含属性IsGenericTypeDefinition和ContainsGenericParameters.阅读完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
不完全已知(因为它的类型参数是类型定义)ContainsGenericParameters
是true
.
ContainsGenericParameters
是一个递归版本IsGenericTypeDefinition
.
typeof(List<Func<>>).IsGenericTypeDefinition
是假的.