一个基本的问题,但似乎难倒我,尽管如此。
给定一个“嵌套泛型”:
IEnumerable<KeyValuePair<TKey, TValue>>
这是否说明 IEnumerable 可以具有本身是 KeyValuePair 的泛型类型?
谢谢,
斯科特
一个基本的问题,但似乎难倒我,尽管如此。
给定一个“嵌套泛型”:
IEnumerable<KeyValuePair<TKey, TValue>>
这是否说明 IEnumerable 可以具有本身是 KeyValuePair 的泛型类型?
谢谢,
斯科特
是的。KeyValuePair 类型需要两个泛型类型参数。我们可以通过指向具体类型来填充它们:
IEnumerable<KeyValuePair<string, int>>
或者我们可以使用外部类已经指定的其他泛型参数来填充它们:
class Dictionary<TKey, TValue> : IEnumerable<KeyValuePair<TKey, TValue>>
泛型类型参数始终在“使用时”指定,或者在您使用需要它们的类或方法时指定。就像任何其他参数一样,您可以使用常量、硬编码值(或本例中的类型)或其他变量来填充它。
是的,这是“键/值对的 IEnumerable”。它将这样宣布:
IEnumberable<KeyValuePair<string, string>> reallyComplicatedDictionary =
new IEnumerable<KeyValuePair<string, string>>();
或类似的。
关于我能认为这种特殊用法的唯一想法是允许您拥有一个带有重复键的“字典”。
简而言之,这意味着当您枚举它时IEnumerable
,您将得到KeyValuePair<TKey, TValue>
(对于任何类型TKey
和TValue
设置)。
所以,是的。
这里
IEnumerable<KeyValuePair<string, int>>
IEnumerable 本身不是泛型的。它知道它将包含 KeyValuePair。这里的 KeyValuePair 是可以包含任何 2 个泛型类型的泛型。