6

IDictionary<TKey, TValue>继承自IEnumerable<KeyValuePair<TKey, TValue>>,但IDictionary由于某种原因不继承自IEnumerable<DictionaryEntry>。我想知道为什么?每次.OfType<DictionaryEntry>()我需要对IDictionary.

4

2 回答 2

4

因为IDictionary是较旧的(预泛型)接口。更改它会破坏现有代码。这是一个遗产。

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

于 2010-06-18T11:00:57.257 回答
3

进行这种更改会破坏接口的每个现有实现(因为它们会突然丢失接口说它们必须具有的一些方法)。

此外,IDictionary 仅存在于泛型之前的遗留兼容性。除非绝对必要,否则您不应该在新代码中使用它。如果您实际使用对象类型,则可以改用 IDictionary<object, object>。

于 2010-06-18T11:00:58.657 回答