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

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

IDictionary myDict = new Dictionary();

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

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

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

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

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

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