1
Func<..>
のラムダをダイナミックに割り当てて動的に呼び出すようにしようとしていますが、パラメータのカウントについて例外がスローされます。DynamicInvokeパラメータの数が予想された数と一致しません
MCVE
using System;
public class Test
{
public static void Main()
{
// your code goes here
try {
dynamic plus = new Func<long, long, long>((a, b) => a + b);
Type functionType = plus.GetType();
int arity = functionType.GetGenericArguments().Length - 1;
Console.WriteLine("Arity {0}", arity);
long[] parameters = new long[arity];
long result = plus.DynamicInvoke(parameters);
}
catch(Exception ex)
{
Console.WriteLine(ex.Message);
}
}
}
例外:Number of parameter does not match expected count.
よりもむしろブランドの新しい配列をキャストし、割り当てを、それが –
@KevinGosseを開始するために[] 'オブジェクトとしてparameters'を宣言するために、おそらくより良いですが、私は同意するものとします。この特定のケースでは、デリゲートを動的に呼び出すコストは、配列の割り当てよりもはるかに高くなります。要点は、入力は 'object []'でなければならないということです。 –