呼び出し可能な「動的」タイプのオブジェクトがある状況があります。一連の引数を使用して、実行時にオブジェクトを動的に呼び出す関数を実装しようとしています。コンパイル時に引数の数がわかっている場合は、簡単に呼び出すことができます。
Object StaticInvoke(dynamic func, Object[] args) {
// arguments are explicitly unwrapped and bound to the invokation
// requiring that we know the number at compile time
return func(args[0], args[1], ...);
}
しかし、args 配列は可変長である可能性があるため、これは私が望むものを達成しません。任意の数の引数をサポートする方法がわかりません。私が思いついた最も近いものは次のようなものです:
static Object Invoke(dynamic func, Object[] args)
{
// not sure what to put here
switch(args.Length)
{
case 0:
return func();
case 1:
return func(args[0]);
case 2:
return func(args[0], args[1]);
...
default:
throw new NotSupportedException();
}
}
これにより、渡すことができる引数の数が制限されます。私はこの制限に耐えることができると思いますが、私がやろうとしていることは可能であるべきだと感じています.
基本的に、C# で JavaScript の「適用」機能を実装しようとしています。私がやろうとしていることを達成するためのより簡単な方法はありますか? 明らかな何かが欠けているように感じます。