Jon*_*eet 7

这样的东西,使用Type.MakeGenericType:

Type arg = Type.GetType(s);
Type definition = typeof(IRepo<>);
Type concrete = definition.MakeGenericType(arg);
Run Code Online (Sandbox Code Playgroud)

请注意,Type.GetType(string)有几点需要注意:

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

  • 还有几点:如果您知道该类型存在于哪个程序集中,则可以使用Assembly.GetType,它应该能够解析完全限定的类型名称,而不会将程序集信息附加到类型字符串.如果您拥有的只是"Foo",则AppDomain.CurrentDomain.GetAssemblies().SelectMany(a => a.GetTypes()).Single(t => t.Name =="Foo")或类似可能是您唯一的选择,但这是脆弱和风险. (2认同)