从泛型类型全名中获取类型

k4s*_*r42 5 c# reflection

我想从这样的泛型类型全名中获取类型:

var myType = Type.GetType("MyProject.MyGenericType`1[[MyProject.MySimpleType, MyProject, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null]]");
Run Code Online (Sandbox Code Playgroud)

但它似乎不适用于这样的泛型类型......

这样做的好方法是什么?

Gyö*_*zeg 3

如果不指定程序集限定名称,则Type.GetType仅适用于mscorlib类型。在您的示例中,您仅为嵌入类型参数定义了 AQN。

// this returns null:
var type = Type.GetType("MyProject.MyGenericType`1[[MyProject.MySimpleType, MyProject, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null]]");

// but this works:
var type = Type.GetType("MyProject.MyGenericType`1[[MyProject.MySimpleType, MyProject, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null]], MyProject, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null");
Run Code Online (Sandbox Code Playgroud)

Assembly.GetType如果您使用而不是,您的原始类型字符串将起作用Type.GetType

var myAsm = typeof(MyGenericType<>).Assembly;
var type = myAsm.GetType("MyProject.MyGenericType`1[[MyProject.MySimpleType, MyProject, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null]]");
Run Code Online (Sandbox Code Playgroud)