2010-09-21 2 views
1

в методе у меня есть объект вроде этого:Как преобразовать экземпляр объекта в общий тип?

Activator.CreateInstance(Type.GetType(TargetObject)) 

и мне нужно передать этот объект в другой класс, которые принимают обобщенный тип:

public class Repository<T> where T : class 
{ 
} 

как я могу использовать этот объект как T к классу репозитория?

+0

только что отредактировал ваш вопрос с помощью разметки-инструмента –

+0

дубликат http://stackoverflow.com/questions/266115/pass-an-instantiated-system-type-as-a-type-parameter-for-a-generic -класс – sloth

ответ

0

Это невозможно. Вы определяете T во время разработки.

+0

Извините, но это неправильно; вы * можете * определить 'T' во время выполнения (так как обобщенные возможности .NET предоставляются средой выполнения, а не компилятором), но это не тривиально и должно быть ограничено только необходимыми сценариями. –

+0

Согласитесь с вами. Но он хотел передать созданный объект классу, который невозможен. – gsharp

1

Вы можете сделать это с отражением, например:

Type repoType = typeof(Repository<>).MakeGenericType(yourType); 

но отражение вскоре begats более отражение - как бы то нужно говорить о repoType с помощью отражения. Там являются путем минимизации этого воздействия, хотя:

  • необщих интерфейсы (самый простым подход)
  • вызова шаблонного метода раз с помощью отражения, что делает всю дополнительную работу по обычному статическому общему коду

Для первого, я мог бы иметь IRepository интерфейс (не общий), то это просто:

IRepository repo = (IRepository)Activator.CreateInstance(repoType); 
repo.SomeNonGenericMethods(args); // etc 
Смежные вопросы