从程序集中获取类型在一些 Type.Name 的末尾添加“'1”

Getting types from assembly adds " '1" at the end of some Type.Name

我正在做的是获取所有引用的程序集,然后获取程序集中定义的类型。在循环并获得 Type.Name 之后,大多数类型名称的末尾都包含 '1。这是什么原因?下面是我目前用来剥离它的代码:

AssemblyName[] assemblyNames = Assembly.GetExecutingAssembly().GetReferencedAssemblies();

      foreach (AssemblyName assemblyName in assemblyNames)
                {
                    if (assemblyName.Name == @namespace)
                    {
                        Assembly assembly = Assembly.Load(assemblyName);

                        var types = assembly.GetTypes().OrderBy(x => x.Name);
                        foreach (Type type in types)
                        {
                           if (!type.Name.Contains("1"))    //'1 is appearing at the end for some reason
                            cmbBoxCallFlowStage.Items.Add(type.Name);
                        else      
                            cmbBoxCallFlowStage.Items.Add(type.Name.Substring(0, type.Name.Length - 2));     //removing "'1" from the string
}

此后缀表示该类型的泛型类型参数的数量。

这些是通用类型的后缀。 .NET 中的泛型类型与 C# 中的泛型类型的编写方式不同。引号后的数字表示泛型类型参数的个数。

由于 .NET 支持同一名称空间中的多个 类 具有相同的名称但具有不同的通用参数计数,因此某处一定存在差异。这就是反引号的用武之地。

此外,Type.Name只显示没有命名空间和泛型类型的类型名称。使用全名查看全名。

例如:

List<int>在c#中写成List`1[[System.Int32]]在.NET中。

Dictionary<string, long>在c#中写成Dictionary`2[[System.String, System.Int64]]在.NET中。

(我的例子比官方形式略短,但我写它是为了解释意思。)

通用类型有一个 1,2 等附加到它们的类型名称以便正确解析。这是 CLR 区分该类型适用于哪个泛型类型。