IDictionary<TKey, TValue>
eredita da IEnumerable<KeyValuePair<TKey, TValue>>
, ma IDictionary
per qualche motivo non eredita da IEnumerable<DictionaryEntry>
. Mi chiedo perché? Odio scrivere questo brutto .OfType<DictionaryEntry>()
ogni volta che ho bisogno di fare una query contro uno IDictionary
.Perché IDictionary (non generico) eredita da IEnumerable <DictionaryEntry>?
6
A
risposta
3
Apportare tale modifica interromperebbe ogni implementazione esistente dell'interfaccia (perché all'improvviso mancherebbero alcuni dei metodi che l'interfaccia dice che devono avere).
Inoltre, IDictionary esiste solo per la compatibilità legacy dal tempo prima dei generici. Non dovresti usarlo nel nuovo codice, a meno che non sia assolutamente necessario. Se stai effettivamente lavorando con i tipi di oggetto, puoi utilizzare l'oggetto IDictionary <, oggetto >.
4
Perché IDictionary
è un'interfaccia (pre-generica) precedente. Cambiandolo si romperebbe il codice esistente. È un'eredità.
Quindi il problema di fondo è: perché stai ancora usando classi basate su IDictionary e non puoi aggiornare?
Problemi correlati
- 1. Come implementare IEnumerable o IDictionary generico per evitare CA1006?
- 2. restituendo un IEnumerable generico <T>
- 3. È possibile vedere se un oggetto eredita IDictionary senza parametri di tipo generico?
- 4. Perché NSOrderedSet non eredita da NSSet?
- 5. IDictionary <TKey, TValue> NET 4 non covariante
- 6. Ottenere i valori di un IDictionary generico utilizzando la riflessione
- 7. Perché IEnumerable <T> è definito come IEnumerable <out T>, non IEnumerable <T>
- 8. Il modo migliore per tradurre da IDictionary a un IDictionary generico
- 9. Estensioni per IEnumerable generico
- 10. Perché una funzione che accetta IEnumerable <interface> non accetta IEnumerable <class>?
- 11. Perché l'Elenco implementa IList <T>, ICollection <T> e IEnumerable <T>?
- 12. IEnumerable <> to IList <>
- 13. Telerik.Web.UI.RadComboBoxContext non è supportato perché implementa IDictionary
- 14. Differenza tra IEnumerable e IEnumerable <T>?
- 15. Trasmetti da IEnumerable a IEnumerable <object>
- 16. Conversione da IEnumerable <IEnumerable <string>> per ICollection <T>
- 17. Perché lo std :: sub_match <T> eredita pubblicamente da std :: pair <T, T>?
- 18. Flatten IEnumerable <IEnumerable <>>; comprensione generici
- 19. C# Impossibile convertire da IEnumerable <Base> a IEnumerable <Derived>
- 20. Perché il C# Dictionary non implementa tutti gli IDictionary?
- 21. Perché Int non eredita/estende da Ordinato [Int]
- 22. IEnumerable <IEnumerable <T>> per IEnumerable <T> utilizzando LINQ
- 23. IDictionary <string, string> o NameValueCollection
- 24. Perché il compilatore sceglie di eseguire l'override con IEnumerable su IEnumerable <T>?
- 25. Generics IAbstract <T> eredita da IAbstract
- 26. Perché non posso trasmettere un elenco IEnumerable <T> a BindingList <t>?
- 27. Tipo 'ASP._Page_index_cshtml' non eredita da 'System.Web.WebPages.WebPage'
- 28. Razor vista Tipo non eredita da 'System.Web.WebPages.WebPage'
- 29. Perché IEnumerable <T> ha metodi FindAll o RemoveAll?
- 30. Perché IEnumerable <T> implementa Aggiungi (T)?