2010-03-16 2 views
5

Как я могу генерировать типы, как они с помощью System.Reflection.Emit библиотеки:Как определить несколько типов с одинаковым именем и разными параметрами типа с помощью Reflection Emit?

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

Когда я называю ModuleBuilder.DefineType (строка) со вторым объявлением типа, я получаю исключение, потому что есть уже другой тип в модуле с тем же именем (я уже определил параметр типа для первого типа). Есть идеи?

ответ

3

Вы должны избегать конфликта так же, как это делают C# и VB.Net. При генерации имени универсального типа добавьте символ и количество общих параметров. Например следующие имена типов на самом деле получить сгенерированные для вышеприведенного

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

Вы можете просмотреть это имя коверкая в BCL с рефлектором. Установите язык в IL вместо C#, и он покажет фактические имена типа, которые испускаются в метаданных, а не с искомым языком.

+0

Работал отлично. Спасибо за ответ! –