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

Yag*_*ngi 4 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
}
Run Code Online (Sandbox Code Playgroud)

Mar*_*der 6

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

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

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

例如:

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

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

(我的例子比正式的形式要短一些,但我写了它来解释含义。)