为什么不显示真实的类型(例如:List< string>而不是List`1)?
这个奇怪的(对我来说)符号来自哪里?
答案 0 :(得分:8)
具有一个类型参数的通用List<T>
的CLR名称是
System.Collections.Generic.List`1
List<T>
是命名该类型的C#样式。
符号是一种定义的约定,使您能够通过参数计数重载泛型类型。如果您声明一个名为List
的类具有两个类型参数(例如List<T,U>
),编译器将能够选择正确的类。它将被命名为:
System.Collections.Generic.List`2
和非通用List
类将命名为:
System.Collections.Generic.List
请注意,CLR不会要求泛型类型。这只是编译器能够选择正确类型的惯例。
答案 1 :(得分:4)
它没有显示List<string>
,因为它是C#依赖语法。 .Net源代码中的List可以声明为List<string>
,List(Of String)
或任何其他可以编译为MSIL的60种左右的语言/语法。
所以你看到的是更通用的MSIL语法。
`1表示它是一个具有一个通用参数的List。
答案 2 :(得分:2)
`1是泛型类型的MSIL语法 - List<T>
是C#特有的。更多MSIL示例:
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]