私は、「ダイナミック」タイプのオブジェクトを呼び出すことができます。私は実行時に引数のセットでオブジェクトを動的に呼び出す関数を実装しようとしています。これは、args配列は、変数の長さにすることがなかったので、私が欲しいものを達成していない、C#で動的オブジェクトを呼び出すことは可能ですか?
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], ...);
}
しかし:私がコンパイル時に引数の数を知っていれば、それを呼び出すために十分に簡単です。私は任意の数の引数をサポートする方法を理解できません。私が一番近づいたのは、次のようなものです:
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の "apply"関数を実装しようとしています。私がやろうとしていることを達成するための簡単な方法はありますか?私は何かが明らかに欠けているように感じる。
なぜあなたのコードのユーザは 'func(...) 'を直接呼び出すのではなく、' Invoke'を呼び出すのですか? –
私はあなたが反射を使ってやろうとしていることをするための方法が組み込まれていると思うが、私はその分野の専門家ではない。代わりに、C#で可変数の引数を使いたい場合は、 'params'キーワードを見てください。私の免責事項は、あなたが実際に 'params'を望んでいるとは思わないということです、あなたはリフレクションを使ってメソッドを呼びたいと思っています。 –
@ M.Babcock:私が作成しようとしている "invoke"は、私たちが使っている古いスクリプトエンジンの "レガシー"呼び出しと同じように、新しい動的呼び出しを扱えるようにインタフェースメソッドを実装しています。 – MarkPflug