IDictionary<TKey, TValue>
наследуется от IEnumerable<KeyValuePair<TKey, TValue>>
, но IDictionary
по какой-то причине не наследуется от IEnumerable<DictionaryEntry>
. Интересно, почему? Ненавижу писать это уродливое .OfType<DictionaryEntry>()
каждый раз, когда мне нужно сделать запрос к IDictionary
.
Почему IDictionary (не общий) не наследуется от IEnumerable ‹DictionaryEntry›?
Ответы (2)
Внесение этого изменения приведет к поломке всех существующих реализаций интерфейса (потому что в них внезапно будут отсутствовать некоторые методы, которые, по словам интерфейса, они должны иметь).
Кроме того, IDictionary существует только для совместимости с устаревшими версиями, существовавшими до дженериков. Вы не должны использовать его в новом коде без крайней необходимости. Если вы действительно работаете с типами объектов, вы можете вместо этого использовать IDictionary ‹object, object›.
Потому что IDictionary
- более старый (предварительный) интерфейс. Его изменение нарушит существующий код. Это наследие.
Итак, основная проблема заключается в том, почему вы (все еще) используете классы на основе IDictionary и не можете выполнить обновление?