El IDictionary<TKey, TValue>
en .NET 4/Silverlight 4 no soporta covarianza, es decir, no puedo hacer un análogoIDictionary <TKey, TValue> en .NET 4 no covariantes
IDictionary<string, object> myDict = new Dictionary<string, string>();
a lo que se puede hacer con IEnumerable<T>
s ahora.
Probablemente se reduce al KeyValuePair<TKey, TValue>
que tampoco es covariante. Creo que la covarianza debe permitirse en los diccionarios, al menos para los valores.
¿Es eso un error o una característica? ¿Alguna vez vendrá, tal vez en .NET 37.4?
UPDATE (2 años después):
Habrá un IReadOnlyDictionary<TKey, TValue>
en .NET 4.5, pero no se covariantes ya sea :·/
, porque deriva de IEnumerable<KeyValuePair<TKey, TValue>>
, y KeyValuePair<TKey, TValue>
no es una interfaz y por lo tanto no puede ser covariante
El equipo de BCL tendría que rediseñar mucho para obtener y usar algo de ICovariantPair<TKey, TValue>
. Tampoco son posibles los indexadores fuertemente tipados a la this[TKey key]
para las interfaces covariantes. Un fin similar solo se puede lograr colocando un método de extensión GetValue<>(this IReadOnlyDictionary<TKey, TValue> self, TKey key)
en algún lugar que de alguna manera internamente tenga que llamar a una implementación real, lo que podría parecer un enfoque bastante desordenado.
Gracias por proporcionar la información actualizada sobre .NET 4.5. En mi humilde opinión, sería útil tener covarianza en un diccionario de solo lectura, así que es una lástima que no parezca que será compatible. – dcstraw