2010-03-16 7 views
5

Come si genera tipi come questi utilizzando le librerie System.Reflection.Emit:Come posso definire più tipi con lo stesso nome e diversi parametri di tipo usando Reflection Emit?

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

Quando chiamo ModuleBuilder.DefineType (stringa) con la seconda dichiarazione del tipo, ottengo un'eccezione perché c'è già un altro tipo nel modulo con lo stesso nome (ho già definito il parametro type sul primo tipo). Qualche idea?

risposta

3

È necessario evitare il conflitto nello stesso modo in cui funzionano C# e VB.Net. Quando si emette un nome di tipo generico, aggiungere un simbolo `e il numero di parametri generici. Per esempio i seguenti nomi dei tipi di realtà vengono generati per quanto sopra

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

È possibile visualizzare questo nome mangling nel BCL con riflettore. Imposta la lingua su IL anziché su C# e mostrerà i nomi effettivi di tipo come emessi nei metadati invece del nome della lingua corretta.

+0

Ha funzionato perfettamente. Grazie per la tua risposta! –

Problemi correlati