Why does the runtime shows the generic types as "GenericType`n"?

.net, generics, reflection, types

Solution

The `1 is MSIL syntax for a generic type - `List<T>` is C#-specific. More MSIL examples:

List<T> == System.Collections.Generic.List`1
List<string> == System.Collections.Generic.List`1[System.String]
Dictionary<string, int> == 
   System.Collections.Generic.Dictionary`2[System.String, System.Int32]

Problem

And why doesn't it shows the real type (eg: List<string> instead of List`1)? Where does this strange (to me) notation comes from?

Original source