Рефлексия и дженерик
От: Аноним  
Дата: 27.05.11 05:56
Оценка:
Как создать тип на основании дженерика и типа созданного с помощью рефлексией.
Код ниже создаст дженерик для object`а, а нужно чтобы для type. Как такое можно сделать?

Type type=sometype;
object obj = Activator.CreateInstance(type);

public void Do<T>(obj)
{
Type t=typeof(GenericType<T>);
}
Re: Рефлексия и дженерик
От: Jack128  
Дата: 27.05.11 06:28
Оценка: 1 (1) +1
Здравствуйте, Аноним, Вы писали:

А>Как создать тип на основании дженерика и типа созданного с помощью рефлексией.

А>Код ниже создаст дженерик для object`а, а нужно чтобы для type. Как такое можно сделать?

А>Type type=sometype;

А>object obj = Activator.CreateInstance(type);

А>public void Do<T>(obj)

А>{
А> Type t=typeof(GenericType<T>);
А>}


var o = Activator.CreateInstance(typeof(GenericType<>).MakeGenericType(ty))


?
Re[2]: Рефлексия и дженерик
От: Аноним  
Дата: 27.05.11 07:45
Оценка:
J>
J>var o = Activator.CreateInstance(typeof(GenericType<>).MakeGenericType(ty))
J>


J>?

нет GenericType- интерфейс
Re[3]: Рефлексия и дженерик
От: Jack128  
Дата: 27.05.11 15:21
Оценка:
Здравствуйте, Аноним, Вы писали:


J>>
J>>var o = Activator.CreateInstance(typeof(GenericType<>).MakeGenericType(ty))
J>>


J>>?

А>нет GenericType- интерфейс

ну так интерфейсы невозможно создать.
Re: Рефлексия и дженерик
От: i1yich  
Дата: 29.05.11 06:21
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Как создать тип на основании дженерика и типа созданного с помощью рефлексией.

А>Код ниже создаст дженерик для object`а, а нужно чтобы для type. Как такое можно сделать?

А>Type type=sometype;

А>object obj = Activator.CreateInstance(type);

А>public void Do<T>(obj)

А>{
А> Type t=typeof(GenericType<T>);
А>}

Ты хочешь вызвать метод Do<T>, чтобы вместо T был фактический тип объекта obj?
Можно получить MethodInfo обобщенного (open generic) метода Do<T>, а затем получить конкретную реализацию (closed generic), вызвав MakeGenericMethod и передав туда требуемый тип. Это вернет тебе MethodInfo конкретной реализации, который ты затем уже и дергаешь через рефлексию.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.