IDictionary <TKey, TValue> в .NET 4 не ковариантен

IDictionary<TKey, TValue> в .NET 4 / Silverlight 4 не поддерживает ковариацию, т.е. я не могу сделать

IDictionary<string, object> myDict = new Dictionary<string, string>();

аналог того, что я могу сделать сIEnumerable<T>снег.

Вероятно, сводится кKeyValuePair<TKey, TValue> не быть ковариантным либо. Я чувствую, что ковариация должна быть разрешена в словарях хотя бы для значений.

Так это ошибка или особенность? Будет ли это когда-нибудь, может быть, в .NET 37.4?

ОБНОВЛЕНИЕ (2 года спустя):

Там будетIReadOnlyDictionary<TKey, TValue> в .NET 4.5, но он также не будет ковариантным:·/потому что это происходит отIEnumerable<KeyValuePair<TKey, TValue>>, а такжеKeyValuePair<TKey, TValue> не является интерфейсом и, следовательно, не может быть ковариантным.

Команде BCL придется многое переделать, чтобы придумать и использоватьICovariantPair<TKey, TValue> вместо. Также строго типизированные индексаторы а-ляthis[TKey key] не возможны для ковариантных интерфейсов. Подобный конец может быть достигнут только путем размещения метода расширенияGetValue<>(this IReadOnlyDictionary<TKey, TValue> self, TKey key) где-то, что как-то внутренне должно вызывать реальную реализацию, что, возможно, выглядит довольно грязным подходом.

Ответы на вопрос(5)

Ваш ответ на вопрос