2012-01-20 3 views
1

Я делаю сравнение общих объектов, используя отражение и рекурсию. Рекурсивному методу требуется информация о типе на каждом шаге, который задается вызывающим. В какой-то момент я знаю, что следующее свойство - Dictionary<T,U>, и я хочу отправить правильный тип. Я пришел с этим:Почему мой отраженный тип словаря не реализует IDictionary?

Type dictionaryType = typeof (IDictionary<,>).MakeGenericType(new [] {keyType.PropertyType, typeof(ValueType)}); 

keyType Где и ValueType типы выяснили ранее. Однако этот тип не реализует интерфейс IDictionary<KeyType, ValueType>, в соответствии с dictionaryType.GetInterfaces(). Зачем? Это выглядит нравится ...

+1

Пожалуйста, работа, что в небольшой полный фрагмент кода. –

+1

Вы создаете объект 'typeof (IDictionary )'. Это тип интерфейса. Он не может реализовать себя. – BoltClock

+0

@ Хенк: Неужели, почему? Вопрос скорее теоретический, я бы сказал, и быть runnable не будет давать много информации. – carlpett

ответ

4

Потому что тип IS IDictionary<KeyType, ValueType>. Метод GetInterfaces только обещает вернуть An array of Type objects representing all the interfaces implemented or inherited by the current Type. Так как IDictionary<> не выполняет (и действительно не может) реализовать, возвращаемое значение является законным образом всеми наследуемыми интерфейсами.

Использование Dictionary<,> как произвольный класс, который реализует IDictionary<,>, следующий будет более подходящим:

Type dictionaryType = typeof (Dictionary<,>).MakeGenericType(new [] {keyType.PropertyType, typeof(ValueType)}); 
+0

Делает совершенный смысл, теперь, когда вы это объяснили. Благодаря :) – carlpett

Смежные вопросы