IDictionary <TKey, TValue> no .NET 4 não covariante
oIDictionary<TKey, TValue>
no .NET 4 / Silverlight 4 não suporta covariância, ou seja, não posso fazer uma
IDictionary<string, object> myDict = new Dictionary<string, string>();
analógico para o que posso fazer comIEnumerable<T>
neve.
Provavelmente se resume aoKeyValuePair<TKey, TValue>
não sendo covariante também. Eu sinto que a covariância deve ser permitida nos dicionários pelo menos para os valores.
Então isso é um bug ou um recurso? Será que alguma vez virá, talvez no .NET 37.4?
ATUALIZAÇÃO (2 anos depois):
Haverá umIReadOnlyDictionary<TKey, TValue>
no .NET 4.5, mas também não será covariante:·/
, porque deriva deIEnumerable<KeyValuePair<TKey, TValue>>
eKeyValuePair<TKey, TValue>
não é uma interface e, portanto, não pode ser covariante.
A equipe da BCL teria que redesenhar muito para aparecer e usar algunsICovariantPair<TKey, TValue>
em vez de. Também indexadores fortemente tipados à lathis[TKey key]
não são possíveis para interfaces covariantes. Um fim semelhante só pode ser alcançado colocando um método de extensãoGetValue<>(this IReadOnlyDictionary<TKey, TValue> self, TKey key)
em algum lugar que de alguma forma internamente teria que chamar uma implementação real, que sem dúvida parece uma abordagem bastante confusa.