How can I generate types like these using the System.Reflection.Emit libraries:
public class Test<T> {}
public class Test<T1, T2> {}
When I call ModuleBuilder.DefineType(string) with the second type declaration, I get an exception because there is already another type in the module with the same name (I’ve already defined the type parameter on the first type). Any ideas?
You should avoid the conflict in the same way that C# and VB.Net do. When emiting a generic type name append a ` symbol and the number of generic parameters. For example the following type names actually get generated for the above
You can view this name mangling in the BCL with reflector. Set the language to IL instead of C# and it will show the actual names of type as emitted in metadata instead of the prettified language name.