为什么IDictionary(非泛型)不从IEnumerable <dictionaryentry>?</dictionaryentry>继承

时间:2010-06-18 10:51:38

标签: .net generics ienumerable idictionary base-class-library

IDictionary<TKey, TValue>继承自IEnumerable<KeyValuePair<TKey, TValue>>,但IDictionary由于某种原因未继承自IEnumerable<DictionaryEntry>。我想知道为什么?每当我需要对.OfType<DictionaryEntry>()进行查询时,我讨厌写这个丑陋的IDictionary

2 个答案:

答案 0 :(得分:4)

因为IDictionary是较旧的(pre-generics)界面。更改它会破坏现有代码。这是遗产。

所以潜在的问题是为什么你(仍然)使用基于IDictionary的类,你不能升级吗?

答案 1 :(得分:3)

进行更改会破坏接口的每个现有实现(因为它们会突然缺少接口所说的必须具有的某些方法)。

此外,IDictionary仅存在于仿制药之前的传统兼容性。除非绝对必要,否则不应在新代码中使用它。如果您实际使用的是对象类型,则可以使用IDictionary&lt; object,object&gt;代替。