为什么 IDictionary (非泛型)不从 IEnumerable 继承?

发布于 2024-09-06 07:19:30 字数 353 浏览 9 评论 0 原文

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

IDictionary<TKey, TValue> inherits from IEnumerable<KeyValuePair<TKey, TValue>>, but IDictionary for some reason doesn't inherit from IEnumerable<DictionaryEntry>. I wonder why? I hate to write this ugly .OfType<DictionaryEntry>() every time when I need to make a query against an IDictionary.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

混浊又暗下来 2024-09-13 07:19:30

因为 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?

我不在是我 2024-09-13 07:19:30

进行这种更改将破坏该接口的每个现有实现(因为它们会突然缺少该接口规定它们必须具有的一些方法)。

此外,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.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文