【问题标题】:Why are the names of generic types mangled in a .NET stack trace?为什么泛型类型的名称在 .NET 堆栈跟踪中被破坏?
【发布时间】:2009-09-02 18:12:14
【问题描述】:

我从 C# 方法中抛出了一个异常,该方法将通用列表作为参数。

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

当它引发异常时,堆栈跟踪会显示 `1 而不是列表的类名。为什么是这样?这就是堆栈跟踪的内容。

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

【问题讨论】:

    标签: c# generics exception stack-trace


    【解决方案1】:

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

    元数据中泛型类型的类型名称(在 C# 和 VB.Net 中)的形式为 TypeName`Number where

    • TypeName:没有泛型参数的类型名称
    • 数字:类型上的泛型参数计数

    这也是为什么拥有多个同名但泛型参数数量不同的泛型类是合法的。在 CLR 级别,它们具有不同的类型名称。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-04-01
      • 2011-01-03
      • 2016-04-10
      • 1970-01-01
      相关资源
      最近更新 更多