正しいタイトルを付けるのが難しい、申し訳ありません。
関数を持つクラス(変更できません)があります
f(string arg1, string arg2, ..., string n)
。
私は配列を持っていますvar arr = new string[n] { ..... }
f
配列項目を変換して、関数を記述せずに関数に渡すにはどうすればよいですか?
f(arr[0], arr[1], ..., arr[n-1])
?
あなたは反射を使うことを考えるかもしれません。
その場合、invoke ouには、引数の配列を渡す可能性があります。
methodInfo.Invoke(instanceOfClass, parametersArray)
例を見ることができます:
リフレクション:パラメーターを使用してメソッドを呼び出す方法
この場合、MethodBase.Invokeのドキュメントによると、配列があるので、通常の方法で引数を渡すだけで、このすべての作業が本当に価値があるかどうかわからないことに注意してください。object[]
boxing/unboxing
リフレクションを使用することもできますが、完全に記述された20個のパラメーターよりもさらに醜いものになると思います。
1つの場所でのみ必要な場合は、20個のパラメーターで呼び出すだけです。複数の場所で必要な場合は、独自のプログラムで20個のパラメーターを使用して関数を作成し、必要な場所で独自のプログラム内でその関数を呼び出します。
MethodInfoなどのリフレクションを使用することも選択の1つです。
[1]メソッドfの情報(擬似コード)を取得します。
MethodInfo[] methodInfos = typeof (TheClassWhereFuncfExists).GetMethods(BindingFlags.Public...);
[2]linqを使用してfのメソッド情報を取得する
MethodInfo fmi= methodInfos.Where(item=> item.Name=="f").FirstOrDefault();
[3] fmiを取得したら、プログラムで次のように呼び出すことができます。
fmi.Invoke(...)
擬似コードのみで、徹底的にテストされていません。