【发布时间】:2012-08-20 10:43:39
【问题描述】:
请参考 Jon Skeet 的回答:Pass An Instantiated System.Type as a Type Parameter for a Generic Class
我需要根据泛型类型的名称以及作为泛型类型参数的类型名称加载一个泛型类型。所以从乔恩的例子中我会有:
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>。当我指定一个非泛型类型从包含泛型类型的同一个程序集中加载时,它可以正常工作。
【问题讨论】:
-
genType-assembly所依赖的所有程序集都可以加载吗?
-
是的。我可以毫无问题地从 genType 的程序集中加载非泛型类。
标签: c# generics late-binding