参考Jon Skeet在这里的答案:将已实例化的System.Type作为泛型类的类型参数传递
我需要根据泛型类型的名称和作为泛型类型参数的类型的名称来加载泛型类型。所以从Jon的示例中,我会有:
string genName = "MyNamespace.Generic";
string itemName = "System.String";
我有以下的代码,它将根据类型的名称和完全合理的程序集名称/路径加载类型。它对于“简单类型”可以正常工作。
public Type GetTypeOf(string assemblyPath, string className)
{
var asmbly = System.Reflection.Assembly.LoadFrom(assemblyPath); //open assembly
return asmbly.GetType(className, true, true); //throws error, not case sensitive
}
我希望您能够将此用于以下方面:
//Get the types
var genTyp = GetTypeOf(genPath,genName);
var itemTyp = GetTypeOf(itemPath,itemName);
//Put them together:
var typ = getType.MakeGenericType(itemTyp);
这会在第一行出现
System.TypeLoadException
,错误信息为:Could not load type <TypeName here> from assembly <AssemblyName here>
我尝试了许多种方法来创建泛型对象,其中一种是提供完整的类名,例如MyNamespace.Generic<System.String>
。当我从包含该泛型类型的程序集中加载非泛型类型时,它可以正常工作。