Универсальные типовые параметры не являются типами? - PullRequest
0 голосов
/ 04 мая 2011

Я нахожу следующее немного запутанным ....

Dictionary<Type, Object> _typeMap;

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

Почему typeof(T) требуется в методе Add? Разве тип T уже не является параметром Type? Что еще это?

Ответы [ 4 ]

6 голосов
/ 04 мая 2011

T - это тип name , а typeof используется для получения соответствующего Type объекта.

Параметр универсального типа работает точно так же, как и любое другое имя типа, скажем, int. Вы тоже не можете сделать typeMap.Add(int, 0);.

1 голос
/ 04 мая 2011

Нет.Add здесь требуется экземпляр класса Type .

Параметры общего типа являются , а не экземплярами класса Type.

0 голосов
/ 04 мая 2011

Это решение кажется мне немного «противником». Я верю , что результатом этого кода всегда будет попытка добавить запись с ключом "Тип" в словарь из-за того, что вы всегда получаете "typeof" из Тип . Вместо этого я думаю, что вы ищете ...

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

Надеюсь, это поможет!

0 голосов
/ 04 мая 2011

Вы можете поставить typeof (T), потому что T - это определение класса, а тип - это объект, описывающий Type, это для T и для Object и для String ... и т. Д. И т. Д.

typeof получает тип определения класса.

...