ここでJonSkeetの回答を参照してください:ジェネリッククラスの型パラメーターとしてインスタンス化されたSystem.Typeを渡します
ジェネリック型の名前と、ジェネリックの型パラメーターである型の名前に基づいてジェネリック型をロードする必要があります。したがって、ジョンの例から、私は次のようになります。
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>
。ジェネリック型を含む同じアセンブリからロードする非ジェネリック型を指定すると、正しく機能します。