C#中的嵌套泛型是什么意思?

时间:2010-08-10 03:02:24

标签: c# generics nested-generics

这是一个基本问题,但似乎让我感到困惑。

给出“嵌套通用”:

IEnumerable<KeyValuePair<TKey, TValue>>

这说明IEnumerable可以拥有本身就是KeyValuePair的泛型类型吗?

谢谢,

斯科特

4 个答案:

答案 0 :(得分:6)

是。 KeyValuePair类型需要两个泛型类型参数。我们可以通过指向具体类型来填充它们:

IEnumerable<KeyValuePair<string, int>>

或者我们可以使用外部类已经指定的其他通用参数来填充它们:

class Dictionary<TKey, TValue> : IEnumerable<KeyValuePair<TKey, TValue>>

通用类型参数始终在“使用中”指定,或者在您使用需要它们的类或方法时指定。就像任何其他参数一样,您可以使用常量的硬编码值(或本例中的类型)或其他变量填充它。

答案 1 :(得分:1)

是的,这是“IEnumerable of Key / Value pair”。它将如此宣布:

IEnumberable<KeyValuePair<string, string>> reallyComplicatedDictionary =
    new IEnumerable<KeyValuePair<string, string>>();

或类似。

关于我认为这种特殊用法可以做的唯一想法是允许你有一个带有重复键的“字典”。

答案 2 :(得分:1)

在坚果shell中,这意味着当您枚举IEnumerable时,您将获得KeyValuePair<TKey, TValue>(对于TKeyTValue设置的任何类型到)。

所以,是的。

答案 3 :(得分:0)

这里

IEnumerable<KeyValuePair<string, int>>

IEnumerable本身不是通用的。它知道它将包含KeyValuePair。这里KeyValuePair是通用的,可以包含任何2种泛型类型。