【问题标题】:The meaning of Dictionary`2 in a stack traceDictionary`2 在堆栈跟踪中的含义
【发布时间】:2018-01-29 11:55:23
【问题描述】:

有时我会在堆栈跟踪中看到这个`2。例如:

System.Collections.Generic.KeyNotFoundException:给定的键不在字典中。 在 System.Collections.Generic.Dictionary`2.get_Item(TKey key)

字典后面的`2是什么意思?

【问题讨论】:

  • '2 表示Dictionarys 声明中的两个 泛型参数:Dictionary<K, V>
  • 哦,哇,在 SO-markdown 中转义前导 ` 很困难......
  • 你可以,你需要双 ` 来做到这一点。

标签: c# stack-trace


【解决方案1】:

System.Collections.Generic.Dictionary`2 表示类型为System.Collections.Generic.Dictionary,有两个类型参数。所以在这种情况下,它意味着类型是System.Collections.Generic.Dictionary<TKey, TValue>,我们都知道。

【讨论】:

  • 一个小疑问,Dictionary 类是由Dictionary<TKey, TValue> 定义的,那么为什么需要指定2 [for with two type arguments] 是否可以使用13 代替?据我所知,一个列表被指定为System.Collections.Generic.List1`。
  • 因为这是 CIL 使用的泛型类型参数的语法。正确的名称。
  • @un-lucky 我也可以假设类具有可变数量的通用参数。以Func 为例(这是delegate,但我认为这也适用于类)。它有一大堆通用参数,从Func<TResult>Func<T1, ..., T8, TResult>
【解决方案2】:

这是 .Net 生成类名的方式。初始声明

 Dictionary<K, V>

将变成Dictionary'2类型名称,其中'2表示两个泛型参数:

 // Dictionary`2 - two generic parameters
 Console.WriteLine(typeof(Dictionary<int, string>).Name);

 // List`1 - one generic parameter
 Console.WriteLine(typeof(List<int>).Name);

请比较:

 // IDictionary`2 - two generic parameters
 Console.WriteLine(typeof(IDictionary<int, string>).Name);

 // IDictionary - no generic parameters
 Console.WriteLine(typeof(System.Collections.IDictionary).Name);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-04-25
    • 1970-01-01
    • 1970-01-01
    • 2017-06-25
    • 2014-05-15
    • 1970-01-01
    • 2011-05-25
    相关资源
    最近更新 更多