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?