【问题标题】:Why does not IDictionary (non-generic) inherit from IEnumerable<DictionaryEntry>?为什么 IDictionary(非泛型)不继承自 IEnumerable<DictionaryEntry>? 【发布时间】:2011-03-05 09:09:45 【问题描述】: IDictionary<TKey, TValue> 继承自 IEnumerable<KeyValuePair<TKey, TValue>>,但 IDictionary 出于某种原因不继承自 IEnumerable<DictionaryEntry>。我想知道为什么?每次我需要对IDictionary 进行查询时,我都讨厌写这个丑陋的.OfType<DictionaryEntry>()。 【问题讨论】: 标签: .net generics ienumerable idictionary base-class-library 【解决方案1】: 因为IDictionary 是一个较旧的(预泛型)接口。更改它会破坏现有代码。这是一个遗产。 所以根本问题是你为什么(仍然)使用基于 IDictionary 的类,但你不能升级吗? 【讨论】: 【解决方案2】: 进行这种更改会破坏接口的所有现有实现(因为它们会突然丢失接口说它们必须具有的一些方法)。 此外,IDictionary 仅存在于泛型之前的遗留兼容性。除非绝对必要,否则您不应该在新代码中使用它。如果您实际使用对象类型,则可以改用 IDictionary。 【讨论】: