当我有T </t>的字符串名称时,获取IRepo <t>类型

时间:2010-08-12 16:05:10

标签: c# .net reflection

基本上

我有

string s = "Foo"

我需要获得

 Type t = IRepo<Foo>

但是来自字符串

3 个答案:

答案 0 :(得分:7)

这样的事情,使用Type.MakeGenericType

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

请注意,Type.GetType(string)附带了一些注意事项:

  • 您需要指定类型的全名,包括名称空间
  • 如果要从mscorlib以外的程序集中获取类型或调用程序集,则必须包含程序集名称
  • 如果您要包含程序集名称并且它是强类型的,则需要包含版本等的完整程序集名称。

答案 1 :(得分:4)

Type t = typeof (IRepo<>).MakeGenericType(Type.GetType(s));

答案 2 :(得分:1)

您可以执行以下操作:

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

首先需要获取Type Foo,然后将其传递给Type.MakeGenericType。