2009-09-26 23 views

回答

2

'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] 
+0

我想你錯過了這一點。 \ 1沒有爲CLR定義泛型類。在IL級別,泛型類可以任意命名。這是解決高級語言的重載泛型類型之間歧義的一種方法。它聲明瞭類型的類型參數的數量,以便可以通過泛型參數的數量來重載類型。你的例子是錯誤的。 '詞典''是Dictionary \'2 [System.String,System.Int32],不是Dictionary \'1,因爲它有**兩個**類型參數。 – 2009-09-27 20:29:22

+0

哎呀,錯字。固定。 – thecoop 2009-09-27 21:09:30

8

的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不需要泛型類型被命名爲這樣。這只是編譯器能夠選擇正確類型的慣例。

+0

我以爲CLI並未消除泛型類型?如果不是,當「列表」變成List'1時「String」在哪裏? – 2009-09-27 13:00:12

+2

'List '成爲List \'1。這是「開放的泛型類型定義」。 'List '的封閉定義將成爲List \'1 [System.String]。 – 2009-09-27 13:40:08

+0

+1,因爲CLR不需要這個。 – 2011-06-24 02:20:56

4

它不顯示List<string>,因爲這是C#依賴語法。 .Net源代碼中的列表可以聲明爲List<string>List(Of String)或可以編譯爲MSIL的任何其他約60種左右的語言/語法。

所以你看到的是更通用的MSIL語法。

`1表示它是一個具有一個通用參數的列表。

相關問題