为什么 IDictionary (非泛型)不从 IEnumerable 继承?
IDictionary
继承自 IEnumerable
,但 IDictionary
由于某种原因不继承自IEnumerable
。我想知道为什么?我讨厌每次需要对 IDictionary
进行查询时都编写这个丑陋的 .OfType
。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
因为 IDictionary 是一个较旧的(前泛型)接口。更改它会破坏现有代码。这是一个遗产。
所以根本的问题是为什么你(仍然)使用基于 IDictionary 的类,并且不能升级?
Because
IDictionary
is an older (pre-generics) interface. Changing it would break existing code. It is a legacy.So the underlying issue is why are you (still) using IDictionary based classes, and can't you upgrade?
进行这种更改将破坏该接口的每个现有实现(因为它们会突然缺少该接口规定它们必须具有的一些方法)。
此外,IDictionary 的存在只是为了兼容泛型之前的版本。除非绝对必要,否则不应在新代码中使用它。如果您实际上正在使用对象类型,则可以使用 IDictionary
Making that change would break every existing implementation of the interface (because they would suddenly be missing some of the methods the interface says they must have).
Furthermore, IDictionary only exists for legacy compatibility from the time before generics. You shouldn't be using it in new code, unless absolutely necessary. If you're actually working with object types, you can use IDictionary<object, object> instead.