いくつかのパラメータをカリングするメソッドへのデリゲートを動的に作成できますか(また、式のコンパイルやDynamicInvokeを使わずに) DynamicInvokeでいくつかのパラメータをカリングするメソッドへのデリゲートを動的に作成できますか(式のコンパイルやDynamicInvokeを使わずに)
カリー化は、式のラムダで
var methodInfo = typeof(MyTools).GetTypeInfo().GetDeclaredMethod(nameof(MyTools.MyMethod));
var delegateType = typeof(Func<,,>).MakeGenericType(typeof(int), typeof(int), typeof(int));
var @delegate = methodInfo.CreateDelegate(delegateType);
var i2 = 1;
var func = (i1) => { return (int)(@delegate.DynamicInvoke(i1, i2)); };
ようになり呼び出すには、それも可能であるコンパイルが、私はそこにそれをスキップ。
私の検索では、i2を受け入れるいくつかの追加パラメータが必要です。curryingを実行し、タイプFunc <のデリゲートを返します。
P.S.ラムダコンパイルの価格は、JIT_MethodAccessCheckのために実行時に発生するオーバーヘッドです。私はJIT_MethodAccessCheckを使わずに削除を作成することができるはずです。
partial applicationが、私は同じデリゲートを構築するためにあなたが必要とするすべてのオーバーライドがありますが、それを動的に構築する:
そして、それをテストします。 T1、T2、T3、T4がType [3]配列であり、同じことをする必要があるとします。 –
多分私は質問を誤解しています。なぜそれを動的に作成していますか?これを行うためにリフレクションを使用することは、ほぼ確実に遅くなります。このような関数をカレーする唯一の方法は、ネストされた 'Func'であるため、ラムダを構築する必要があります。 – louthster