Reflection Emit如何定义具有相同名称但不同类型参数的多个类型?

5
我该如何使用System.Reflection.Emit库生成这样的类型:

public class Test<T> {}
public class Test<T1, T2> {}

当我使用第二个类型声明调用ModuleBuilder.DefineType(string)时,会抛出异常,因为模块中已经有另一个同名的类型(我已经在第一个类型上定义了类型参数)。您有什么想法吗?

1个回答

3
你应该像C#和VB.Net一样避免冲突。在发出通用类型名称时,附加一个`符号和通用参数的数量。例如,上面的示例实际上生成了以下类型名称。
class Test`1 // Test<T>
class Test`2 // Test<T1,T2>

您可以使用反编译工具 Reflector 查看此名称混淆。将语言设置为 IL,而非 C#,它将显示在元数据中发出的类型的实际名称,而不是经过美化的语言名称。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接