【发布时间】:2021-02-19 04:19:23
【问题描述】:
我注意到只有将变量声明为IDictionary<TKey, TValue> 时,才能将键值对添加到字典中。这导致我进一步挖掘兔子洞,导致我发现似乎有一个奇怪的差异:
-
Microsoft Docs 明确确认
IDictionary<TKey, TValue>实现IEnumerable<T>
Microsoft Docs Screenshot - IDictionary Implements implementsIEnumerable<T> -
在 mscorlib 上使用 Visual Studio 的 Reflector Tool,
IDictionary<TKey, TValue>似乎没有实现IEnumerable<T>Reflector Tool Screenshot - mscorlib, IDictionary seems to not implement
IEnumerable<T>
任何解释都会有助于满足这个好奇的心!
【问题讨论】:
-
你的截图显示,它确实实现了
IEnumerable<KeyValuePair<TKey, TValue>>,其中T被扣除为KeyValuePair<TKey, TValue>。 -
在这种情况下
T是什么?我们只有IDictionary<TKey, TValue>。 -
@Carsten 我也这么想,但对我来说没有多大意义,因为它已经用
IEnumrable<KeyValue<指定了 -
好吧,文档是错误的。它不可能实现
IEnumerable<T>,因为T不是IDictionary的泛型参数!但是请注意,IEnumerable(所有风格)无论如何都与您的问题无关,因为IEnumerable不包含任何添加方法。ICollection可以,但该方法通常会显式实现,以免与字典自己的Add方法(获取键和值)混淆。
标签: c# .net visual-studio ienumerable idictionary