5

如何使用 System.Reflection.Emit 库生成此类类型:

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

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

4

1 回答 1

3

您应该像 C# 和 VB.Net 一样避免冲突。发出泛型类型名称时,附加一个 ` 符号和泛型参数的数量。例如,实际上为上面生成了以下类型名称

class Test`1 // Test<T>
class Test`2 // Test<T1,T2>

您可以在带有反射器的 BCL 中查看此名称的修改。将语言设置为 IL 而不是 C#,它将显示元数据中发出的类型的实际名称,而不是美化的语言名称。

于 2010-03-16T20:31:27.770 回答