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.

questionAnswers(5)

yourAnswerToTheQuestion