繁体   English   中英

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

[英]How can I define multiple types with the same name and different type parameters using Reflection Emit?

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

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

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM