爲什麼它不顯示真正的類型(例如:列表<字符串>而不是List`1)?
這個奇怪的(對我)符號來自哪裏?爲什麼運行時將泛型顯示爲「GenericType`n」?
回答
'1是通用類型的MSIL語法 - List<T>
是C#特有的。更多MSIL例子:
List<T> == System.Collections.Generic.List`1
List<string> == System.Collections.Generic.List`1[System.String]
Dictionary<string, int> ==
System.Collections.Generic.Dictionary`2[System.String, System.Int32]
的CLR名稱通用List<T>
一個類型參數是
System.Collections.Generic.List`1
List<T>
是命名該類型的C#風格。
符號是一種爲了讓您能夠通過參數數量來重載泛型的能力。如果使用兩個類型參數(例如List<T,U>
)聲明名爲List
的類,編譯器將能夠選擇正確的類型。它會被命名爲:
System.Collections.Generic.List`2
和非通用類List
將被命名爲:
System.Collections.Generic.List
注意,CLR不需要泛型類型被命名爲這樣。這只是編譯器能夠選擇正確類型的慣例。
我以爲CLI並未消除泛型類型?如果不是,當「列表
'List
+1,因爲CLR不需要這個。 – 2011-06-24 02:20:56
它不顯示List<string>
,因爲這是C#依賴語法。 .Net源代碼中的列表可以聲明爲List<string>
,List(Of String)
或可以編譯爲MSIL的任何其他約60種左右的語言/語法。
所以你看到的是更通用的MSIL語法。
`1表示它是一個具有一個通用參數的列表。
- 1. 爲什麼這個泛型代碼沒有運行時錯誤?
- 2. 爲什麼編譯器在將短值傳遞給泛型時顯示錯誤
- 3. 爲什麼調用Ctype在運行時失敗,從int轉換爲泛型?
- 4. 爲什麼LineBreak在php中顯示「n」?
- 5. ConfigurationManager.AppSettings將「\ n」轉換爲「\\ n」爲什麼?
- 6. 爲什麼在顯示行> = n時,BigQuery中的nth_value函數會顯示?
- 7. 爲什麼行不顯示?
- 8. 不顯示€爲N/d時
- 9. 爲什麼在運行它時顯示Hello World?
- 10. 爲什麼試圖運行blueimp上傳器時會顯示{「files」:[]}?
- 11. 爲什麼這會顯示運行時錯誤?
- 12. 爲什麼Processing/Processing.js草圖在運行時不顯示?
- 13. 爲什麼Pygame在運行我的代碼時顯示黑屏?
- 14. 爲什麼ImageButton顯示文本SubmitQuery運行時
- 15. 爲什麼ProgressDialog在運行時沒有顯示?
- 16. GWT,爲什麼CellTable在Eclipse中運行時不顯示圖像?
- 17. 爲什麼JavaScript將01002004顯示爲6295553?
- 18. 爲什麼A.class在運行時爲空?
- 19. 爲什麼這個代碼的運行時效率O(n^2)?
- 20. 爲什麼運行時構造決策樹mnlog(n)?
- 21. 作爲泛型參數傳遞時,爲什麼泛型類型不被識別爲其派生類型?
- 22. 爲什麼#1程序顯示運行時錯誤,而#2正確運行?
- 23. 爲什麼windows服務顯示QuartzServer即使在運行時也不運行?
- 24. 爲什麼我不能將`this`強制轉換爲泛型?
- 25. C#運行時將約束泛型類型轉換爲約束類型
- 26. 泛型運行時異常
- 27. java泛型運行時error.java.util.ConcurrentModificationException
- 28. Ada泛型在運行時
- 29. 泛型在運行時
- 30. 爲什麼在這裏不允許轉換爲「GenericType <?>」?
我想你錯過了這一點。 \ 1沒有爲CLR定義泛型類。在IL級別,泛型類可以任意命名。這是解決高級語言的重載泛型類型之間歧義的一種方法。它聲明瞭類型的類型參數的數量,以便可以通過泛型參數的數量來重載類型。你的例子是錯誤的。 '詞典''是Dictionary \'2 [System.String,System.Int32],不是Dictionary \'1,因爲它有**兩個**類型參數。 –
2009-09-27 20:29:22
哎呀,錯字。固定。 – thecoop 2009-09-27 21:09:30