IDictionary<TKey, TValue>
hereda de IEnumerable<KeyValuePair<TKey, TValue>>
, pero IDictionary
por alguna razón no hereda de IEnumerable<DictionaryEntry>
. ¿Me pregunto porque? Odio escribir este feo .OfType<DictionaryEntry>()
cada vez que necesito hacer una consulta en contra de IDictionary
.¿Por qué IDictionary (no genérico) hereda de IEnumerable <DictionaryEntry>?
6
A
Respuesta
3
Hacer ese cambio rompería todas las implementaciones existentes de la interfaz (porque de repente faltarían algunos de los métodos que la interfaz dice que deben tener).
Además, IDictionary solo existe para compatibilidad heredada desde la época anterior a los genéricos. No debe usarlo en un código nuevo, a menos que sea absolutamente necesario. Si realmente está trabajando con tipos de objetos, puede usar el objeto IDictionary <, objeto > en su lugar.
4
Porque IDictionary
es una interfaz más antigua (pre-genéricos). Cambiarlo rompería el código existente. Es un legado
El problema subyacente es por qué estás (todavía) usando clases basadas en IDictionary, y no puedes actualizar?
Cuestiones relacionadas
- 1. ¿Por qué IEnumerable <T> hereda de IEnumerable?
- 2. ¿Por qué IEnumerator <T> hereda de IDisposable mientras que el IEnumerator no genérico no?
- 3. ¿Cómo implementar IEnumerable genérico o IDictionary para evitar CA1006?
- 4. ¿Por qué HttpSessionState no implementa IDictionary?
- 5. ¿Cuál es la diferencia entre el IEnumerable no genérico y el IEnumerable genérico <T>?
- 6. devolviendo un genérico IEnumerable <T>
- 7. Por qué IEnumerable <T> se define como IEnumerable <out T>, no IEnumerable <T>
- 8. ¿Por qué una función que toma IEnumerable <interface> no acepta IEnumerable <class>?
- 9. ¿Por qué no puedo incluir IEnumerable <struct> como IEnumerable <object>?
- 10. ¿Por qué FormatException no hereda de ArgumentException?
- 11. ¿Por qué TreeNodeCollection no se aplica IEnumerable <TreeNode>?
- 12. ¿Por qué IEnumerable <T> no implementa Agregar (T)?
- 13. Genérico hereda ViewPage <> y la nueva propiedad
- 14. IDictionary <,> contravariancia?
- 15. ¿Por qué el Diccionario de C# no implementa todo IDictionary?
- 16. Obtener valores de IDictionary genérico utilizando la reflexión
- 17. Cómo crear un tipo que implementan IDictionary <'K, 'V> y IEnumerable <'V>
- 18. ¿Por qué las matrices en .net solo implementan IEnumerable y no IEnumerable <T>?
- 19. ¿Por qué el Diccionario <TKey, TValue> no tiene un IEnumerable <KeyValuePair <TKey, TValue >> ctor?
- 20. ¿Por qué ICollection <T> implementar tanto IEnumerable <T> y IEnumerable
- 21. IDictionary <TKey, TValue> en .NET 4 no covariantes
- 22. Cómo convertir un IEnumerable <IEnumerable <T>> a un IEnumerable <T>
- 23. IEnumerable <> to IList <>
- 24. ¿Por qué IList <T> no tiene Insertar métodos que toman IEnumerable <T>?
- 25. ¿Por qué no Cast <double>() funciona en IEnumerable <int>?
- 26. ¿Por qué std :: sub_match <T> hereda públicamente de std :: pair <T, T>?
- 27. Diferencia entre IEnumerable e IEnumerable <T>?
- 28. Por qué covarianza no funciona con método genérico
- 29. ¿Por qué <input> no hereda la fuente del cuerpo?
- 30. ¿Por qué NSOrderedSet hereda de NSSet?