получить тип IRepo <T>, когда у меня есть имя строки для T - PullRequest
0 голосов
/ 12 августа 2010

в основном

У меня есть

string s = "Foo"

Мне нужно получить

 Type t = IRepo<Foo>

но из строки

Ответы [ 3 ]

7 голосов
/ 12 августа 2010

Примерно так: Type.MakeGenericType:

Type arg = Type.GetType(s);
Type definition = typeof(IRepo<>);
Type concrete = definition.MakeGenericType(arg);

Обратите внимание, что Type.GetType(string) имеет несколько предостережений:

  • Вам необходимо указать полное имя типа, включая пространство имен
  • Если вы хотите получить тип из сборки, отличной от mscorlib или вызывающей сборки, вы должны включить имя сборки
  • Если вы включаете имя сборки и она строго напечатана, вам нужно полное имя сборки, включая версию и т. Д.
4 голосов
/ 12 августа 2010
Type t = typeof (IRepo<>).MakeGenericType(Type.GetType(s));
1 голос
/ 12 августа 2010

Вы можете сделать следующее:

var someTypeName = "Foo";
var someType = Type.GetType("Namespace.To." + someTypeName);
typeof(IRepo<>).MakeGenericType(someType);

Сначала нужно получить Type из Foo, а затем вы можете передать его в Type.MakeGenericType.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...