[英]Difference between Type.IsGenericTypeDefinition and 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
本身不是泛型類型定義,因為它的類型參數已知為某些T的List<T>
。但是,因為listOfSomeUnknownTypeOfList
的類型不是完全已知的(因為它的類型參數是類型定義) ) ContainsGenericParameters
為true
。
ContainsGenericParameters
是IsGenericTypeDefinition
的遞歸版本。
typeof(List<Func<>>).IsGenericTypeDefinition
為false。
IsGenericType
下有一個表,它試圖突出顯示一些差異:
IsGenericTypeDefinition
屬性為true。定義泛型類型。 通過在
Type
對象上調用MakeGenericType
方法來創建構造類型,該對象表示泛型類型定義並指定類型參數的數組。
要么:
ContainsGenericParameters
屬性為true。示例是具有未分配的類型參數的泛型類型,嵌套在泛型類型定義或開放構造類型中的類型,或具有
ContainsGenericParameters
屬性為true的類型參數的泛型類型。
所以他們並不完全一樣。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.