2011-05-04 211 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