2011-05-04 322 views
0

我發現下面的有點混亂....泛型類型參數不是類型?

Dictionary<Type, Object> _typeMap; 

public void RegisterType<T>(Object o) 
{ 
    _typeMap.Add(typeof(T), o); 
} 

爲什麼在Add方法需要typeof(T)?是不是T類型參數已經是Type?還有什麼呢?

回答

6

T是一種類型的名稱,和typeof用於檢索對應Type對象。

泛型類型參數的工作原理與其他類型名稱完全相同,如int。你也不能確切地做typeMap.Add(int, 0);

+0

非常感謝。也許MSDN應該將它們稱爲「類型名稱參數」而不是「類型參數」,本可以讓我省卻混亂。 – fearofawhackplanet 2011-05-04 10:50:51

1

Add這裏需要Type的一個實例。

一般類型參數Type類的實例。

0

你HACE把將typeof(T),因爲T是類的定義,類型是描述一個類型的對象,這對於T和對象和字符串...等等等等

的typeof獲取類定義的類型。

-1

這個解決方案讓我覺得有點「opps」。我認爲該代碼的結果將始終嘗試添加一個鍵入「類型」的詞條到詞典中,因爲您總是得到類型的「typeof」。相反,我覺得你在找什麼是...

public void RegisterType<T>(Object o) 
{ 
    _typeMap.Add(T, o); 
} 

希望它能幫助!

+0

您不能將「T」傳遞給_typeMap.Add,因爲「T」不是表達式。你需要一個System.Type類型的表達式來傳遞給Add。 – 2011-05-04 13:38:25