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