为什么泛型类型的名称在.NET堆栈跟踪错位?(Why are the names of generi

2019-07-04 11:31发布

我有一个例外,从C#方法,采用一个通用的清单作为paremeter被抛出。

private static void DoWork(List<ClassName> a)
{
}

当它抛出一个异常,堆栈跟踪显示的`1,而不是对列表中的类名。 为什么是这样? 这是堆栈跟踪了。

... 
at DoWork(List`1 a).
...

Answer 1:

之所以是堆栈跟踪由CLR,而不是C#生成。 因此,它使用CLR类型名称与C#类型名称。

在元数据提供给通用类型(在C#和VB.Net)的类型名称的格式TypeName`Number其中

  • 类型名:在泛型参数的abscence类型的名称
  • 编号:该类型泛型参数的计数

这也是为什么它是合法的,有几个泛型类,其名称相同,但通用参数的数量不同。 在CLR水平,他们有不同的类型名称。



文章来源: Why are the names of generic types mangled in a .NET stack trace?