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)
где-то, что как-то внутренне должно вызывать реальную реализацию, что, возможно, выглядит довольно грязным подходом.