2010-03-16 5 views
5

Comment puis-je générer des types comme ceux-ci en utilisant les bibliothèques System.Reflection.Emit:Comment puis-je définir plusieurs types avec le même nom et différents paramètres de type à l'aide de Reflection Emit?

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

Quand j'appelle ModuleBuilder.DefineType (string) avec la deuxième déclaration de type, je reçois une exception parce qu'il ya déjà un autre type dans le module avec le même nom (j'ai déjà défini le paramètre type sur le premier type). Des idées?

Répondre

3

Vous devriez éviter le conflit de la même manière que C# et VB.Net. Lors de l'émission d'un nom de type générique, ajoutez un symbole et le nombre de paramètres génériques. Par exemple, les noms de type suivants sont générées en fait pour le

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

Vous pouvez voir ce nom mutiler dans le BCL avec réflecteur. Définir la langue à IL au lieu de C# et il montrera les noms réels de type comme émis dans les métadonnées au lieu du nom de langue prettified.

+0

A travaillé parfaitement. Merci pour votre réponse! –

Questions connexes