Why are the names of generic types mangled in a .NET stack trace?

c#, exception, generics, stack-trace

Solution

The reason why is that the stack trace is generated by the CLR and not C#. Hence it uses CLR type names vs. C# type names.

The type names given to generic types in metadata (in both C# and VB.Net) have the form TypeName`Number where

- TypeName: Name of the type in the abscence of generic parameters

- Number: Count of generic parameters on the type

This is also why it's legal to have several generic classes which the same name but differing numbers of generic parameters. At a CLR level they have different type names.

Problem

I have an exception being thrown from a C# method, that takes a generic list as a paremeter. ``` private static void DoWork(List<ClassName> a) { } ``` When it throws an exception, the stack trace shows an `1 instead of the class name for the list. Why is this? This is what the stack trace has. ``` ... at DoWork(List`1 a). ... ```

Original source