IDictionary<TKey, TValue>
继承自IEnumerable<KeyValuePair<TKey, TValue>>
,但IDictionary
由于某种原因未继承自IEnumerable<DictionaryEntry>
。我想知道为什么?每当我需要对.OfType<DictionaryEntry>()
进行查询时,我讨厌写这个丑陋的IDictionary
。
答案 0 :(得分:4)
因为IDictionary
是较旧的(pre-generics)界面。更改它会破坏现有代码。这是遗产。
所以潜在的问题是为什么你(仍然)使用基于IDictionary的类,你不能升级吗?
答案 1 :(得分:3)
进行更改会破坏接口的每个现有实现(因为它们会突然缺少接口所说的必须具有的某些方法)。
此外,IDictionary仅存在于仿制药之前的传统兼容性。除非绝对必要,否则不应在新代码中使用它。如果您实际使用的是对象类型,则可以使用IDictionary&lt; object,object&gt;代替。