Search code examples
c#genericsnested-generics

What do nested generics in C# mean?


A bit of a basic question, but one that seems to stump me, nonetheless.

Given a "nested generic":

IEnumerable<KeyValuePair<TKey, TValue>>

Is this stating that IEnumerable can have generic types that are themselves KeyValuePair 's ?

Thanks,

Scott


Solution

  • Yes. The KeyValuePair type expects two generic type parameters. We can either populate them by pointing to concrete types:

    IEnumerable<KeyValuePair<string, int>>
    

    Or we can populate them by using other generic parameters already specified by the outer class:

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

    Generic type parameters are always specified "at-use", or at the point where you are using the class or method that requires them. And just like any other parameter, you can fill it with a constant, hard-coded value (or type in this case), or another variable.