Почему IDictionary (не универсальный) не наследуется от IEnumerable <DictionaryEntry>? - PullRequest
6 голосов
/ 18 июня 2010

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

Ответы [ 2 ]

4 голосов
/ 18 июня 2010

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

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

3 голосов
/ 18 июня 2010

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

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

...