私はこの静的関数を持っています
public static object Create(Type t)
{
//unimportant
}
上記の関数を制御できないため、変更できません。問題はジェネリックではないため、返されたオブジェクトを何らかの型にキャストする必要があります。この型は、メソッドを呼び出した別のジェネリック クラスの制約によって提供されます。Create
これは私が到達した場所です:
public static class Creator<T>
{
public static void Create()
{
var m = typeof(SomeClass).GetMethod("Create");
var p = Expression.Parameter(typeof(Type));
var e = Expression.Call(m, p);
//at this stage I want to create delegate for calling the 'Create' method,
//then pass typeof(T) as parameter, get returned object,
//and finally cast it to 'T'.
//for eg, I can do it like this:
var f = Expression.Lambda<Func<Type, object>>(e, p).Compile();
Func<T> mainThing = () => (T)f(typeof(T));
//is there a way I can achieve in one step?
}
}
上記のアプローチでは、最終的なデリゲートをコンパイルするのではなく、1 ステップ前にコンパイルします。Func<T>
コンパイル前にキャストを組み込んで元に戻すにはどうすればよいですか?