簡體   English   中英

Type.IsGenericTypeDefinition和Type.ContainsGenericParameters之間的區別

[英]Difference between Type.IsGenericTypeDefinition and Type.ContainsGenericParameters

System.Type類型包含屬性IsGenericTypeDefinitionContainsGenericParameters 閱讀完MSDN文檔后,我得出結論,兩個屬性都存在,以檢查類型是開放類型還是封閉類型。

但是,我沒有看到兩者之間的區別,以及何時想要使用另一個。

Type.ContainsGenericParameters遞歸的

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

這里發生的是listOfSomeUnknownTypeOfList本身不是泛型類型定義,因為它的類型參數已知為某些T的List<T> 。但是,因為listOfSomeUnknownTypeOfList的類型不是完全已知的(因為它的類型參數是類型定義) ) ContainsGenericParameterstrue

ContainsGenericParametersIsGenericTypeDefinition的遞歸版本。

typeof(List<Func<>>).IsGenericTypeDefinition為false。

IsGenericType下有一個表,它試圖突出顯示一些差異:

IsGenericTypeDefinition屬性為true。

定義泛型類型。 通過在Type對象上調用MakeGenericType方法來創建構造類型,該對象表示泛型類型定義並指定類型參數的數組。

要么:

ContainsGenericParameters屬性為true。

示例是具有未分配的類型參數的泛型類型,嵌套在泛型類型定義或開放構造類型中的類型,或具有ContainsGenericParameters屬性為true的類型參數的泛型類型。

所以他們並不完全一樣。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM