Il IDictionary<TKey, TValue>
NET 4/Silverlight 4 non supporta covarianza, cioè che non può fare un analogoIDictionary <TKey, TValue> NET 4 non covariante
IDictionary<string, object> myDict = new Dictionary<string, string>();
di quanto posso fare con IEnumerable<T>
s ora.
Probabilmente si riduce allo KeyValuePair<TKey, TValue>
non essendo covariante neanche. Sento che la covarianza dovrebbe essere permessa nei dizionari almeno per i valori.
Quindi è un bug o una funzionalità? Arriverà mai, forse in .NET 37.4?
UPDATE (2 anni più tardi):
Ci sarà un IReadOnlyDictionary<TKey, TValue>
NET 4.5, ma non sarà covariante sia :·/
, perché deriva dalla IEnumerable<KeyValuePair<TKey, TValue>>
, e KeyValuePair<TKey, TValue>
non è un'interfaccia e quindi non può essere covariante.
Il team BCL dovrebbe riprogettare molto per venire e utilizzare un po 'di ICovariantPair<TKey, TValue>
. Anche gli indicizzatori fortemente tipizzati alla this[TKey key]
non sono possibili per le interfacce covarianti. Un fine simile può essere raggiunto solo posizionando un metodo di estensione GetValue<>(this IReadOnlyDictionary<TKey, TValue> self, TKey key)
da qualche parte che in qualche modo dovrebbe internamente chiamare un'attuazione reale, che probabilmente sembra un approccio piuttosto caotico.
Grazie per la fornitura l'aggiornamento su .NET 4.5. IMHO sarebbe utile avere covarianza su un dizionario di sola lettura, quindi è un peccato che non sia come se fosse supportato. – dcstraw