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



我要做的是获取所有引用的程序集,然后获取程序集中定义的类型。在循环并获得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只显示类型的名称,不显示命名空间和泛型类型。使用全名查看全名。

例如:

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

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

(我的例子比官方形式短一点,但我写它是为了解释含义。)

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

泛型类型在其类型名称后面附加了一个1, 2等,以获得正确的解析。这是CLR区分该类型用于哪种泛型类型。

相关内容

最新更新