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