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

时间:2015-03-27 12:12:28

标签: c# .net-assembly

我正在做的是获取所有引用的程序集,然后获取程序集中定义的类型。在循环并获取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
}

3 个答案:

答案 0 :(得分:3)

这些是泛型类型的后缀。 .NET中的泛型类型与C#中的泛型类型的写法不同。引号后面的数字表示泛型类型参数的数量。

由于.NET支持同一名称空间中具有相同名称但具有不同通用参数计数的多个类,因此某处必须存在差异。这就是反击的来源。

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

例如:

c#中的

List<int>在.NET中写为List`1[[System.Int32]]

c#中的

Dictionary<string, long>在.NET中写为Dictionary`2[[System.String, System.Int64]]

(我的例子比官方表格略短,但我写了它来解释其含义。)

答案 1 :(得分:0)

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

答案 2 :(得分:0)

通用类型的类型名称附加了1, 2等,以便正确解析。这个CLR区分了这种类型的泛型类型。