回答
因爲T
不是Type
對象,它只是一個類型參數。
在編譯時,類型參數將被實際類型替換。例如,對於string
類型生成的代碼,typeof(T)
實際上是typeof(string)
。這裏string
不是Type
對象,它只是一個數據類型。您需要typeof
才能獲取該數據類型的Type
對象。
ok Guffa ...所以你的意思是typeOf(T)給我們**類型T的對象**。 。我很好的說我? – 2012-04-16 07:49:02
@UmeshK:不,'typeof(T)'給你一個'Type'對象,它描述了'T'類型。例如'typeof(string)'返回與'「」.GetType()'相同的值。 – Guffa 2012-04-16 08:01:44
我在說「T型對象」,你說它是「類型對象,它描述了T型」..所以兩者都是同樣的東西.. – 2012-04-20 07:27:20
因爲類型與描述類型的對象之間存在差異。
T
是一種類型。 typeof
應用於某個類型,並返回Type
類型的對象,其中描述了該類型。
另一個試圖解釋的區別:
有編譯時類型,如string
,int
或MyClass
。您在編寫代碼時宣佈了它們。
有運行時間類型。它們被保存在Type
類型的對象中。這些是運行時在內存中存在的普通對象實例。你可以通過typeof(MyType
)得到這樣的對象。這些類型的對象可以用來在運行時檢查類型。
- 1. T的類型forSome {type T}
- 2. 當T是一個valuetype時,將字符串轉換爲泛型類型T的更快捷方式是什麼?
- 3. T是什麼類型?
- 4. T的類型是什麼?
- 5. 當T不是現有類型時,爲什麼「struct T * next」會被編譯?
- 6. 爲什麼我們必須做模板的<class /類型名稱>的T,而不是僅僅型板T
- 7. std :: vector <T> :: clear()是什麼時候T是一個原始類型?
- 8. 什麼時候必須爲IEnumerable擴展方法指定類型<T>?
- 9. 繼承通用類T必須是引用類型
- 10. 爲什麼按'add_rvalue_reference <T> :: type'而不是'T &&'指定'declval'?
- 11. 使用GetTable()給出的錯誤'類型T必須是引用類型'
- 12. 爲什麼要使用const T&而不是const T或T&
- 13. 類型「爲MyObject」必須是一個非空值類型,以便用它作爲參數「T」在通用類型或方法「可爲空<T>」
- 14. 轉換的typeof(T)至T
- 15. typeof(T)vs <T>
- 16. 類型「字符串」必須是非可空類型,才能在泛型類型或方法來使用它作爲參數T「System.Nullable <T>」
- 17. 如何獲得某個類的<T><T>當某個類通過某個類型時
- 18. typeof(t).GetProperties()當t是從另一個接口派生的接口
- 19. 爲什麼拋出或捕獲的類型必須來自System.Exception
- 20. 'T'類型必須是可轉換的,才能在通用類型或方法中將其用作參數'T'
- 21. 當使用 - >和「必須是類類型」時,給出「必須是類指針類型」的對象使用
- 22. 爲什麼泛型經常使用T?
- 23. 爲什麼「t instanceof T」不允許,其中T是類型參數,t是變量?
- 24. C#。什麼「類型T必須是引用類型才能用作參數。」手段?
- 25. 類型'System.Data.Spatial.DbGeography'必須是非空值類型才能用作參數'T'
- 26. 爲什麼我不能使用if x ==「T」x ==「」來代替T
- 27. 錯誤ninject類型「T」必須是可轉化爲「T」,以便以通用方法用它作爲一個參數「T」
- 28. 什麼是退貨類型<T> T?
- 29. super(type,obj):obj必須是一個實例或子類型
- 30. 幫助C#泛型錯誤 - 「類型'T'必須是非空值類型」
歡迎使用StackOverflow:如果您發佈代碼,XML或數據樣本,請**在文本編輯器中突出顯示這些行,然後在編輯器工具欄上單擊「代碼示例」按鈕(「{}」)格式和語法突出顯示它! – 2012-04-16 07:28:36
你在說什麼編程語言? – Jeffrey 2012-04-16 07:29:26
並且還使用您正在使用的編程語言的標記。 – Naveen 2012-04-16 07:29:34