Почему не делает (неуниверсального) IDictionary, наследовались IEnumerable <DictionaryEntry>?

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

6
задан thorn̈ 18 June 2010 в 10:51
поделиться

2 ответа

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

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

3
ответ дан 17 December 2019 в 00:03
поделиться

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

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

.
4
ответ дан 17 December 2019 в 00:03
поделиться
Другие вопросы по тегам:

Похожие вопросы: