Почему IDictionary (не общий) не наследуется от IEnumerable ‹DictionaryEntry›?

IDictionary<TKey, TValue> наследуется от IEnumerable<KeyValuePair<TKey, TValue>>, но IDictionary по какой-то причине не наследуется от IEnumerable<DictionaryEntry>. Интересно, почему? Ненавижу писать это уродливое .OfType<DictionaryEntry>() каждый раз, когда мне нужно сделать запрос к IDictionary.


person thorn0    schedule 18.06.2010    source источник


Ответы (2)


Внесение этого изменения приведет к поломке всех существующих реализаций интерфейса (потому что в них внезапно будут отсутствовать некоторые методы, которые, по словам интерфейса, они должны иметь).

Кроме того, IDictionary существует только для совместимости с устаревшими версиями, существовавшими до дженериков. Вы не должны использовать его в новом коде без крайней необходимости. Если вы действительно работаете с типами объектов, вы можете вместо этого использовать IDictionary ‹object, object›.

person Craig Gidney    schedule 18.06.2010

Потому что IDictionary - более старый (предварительный) интерфейс. Его изменение нарушит существующий код. Это наследие.

Итак, основная проблема заключается в том, почему вы (все еще) используете классы на основе IDictionary и не можете выполнить обновление?

person Henk Holterman    schedule 18.06.2010