从程序集中获取类型在一些 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 区分该类型适用于哪个泛型类型。
我正在做的是获取所有引用的程序集,然后获取程序集中定义的类型。在循环并获得 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 区分该类型适用于哪个泛型类型。