很难给出正确的标题,对此感到抱歉。
我有一个带有函数的类(我不能修改)
f(string arg1, string arg2, ..., string n)
.
我有一个数组var arr = new string[n] { ..... }
如何f
在无需编写的情况下将数组项转换为传递函数
f(arr[0], arr[1], ..., arr[n-1])
?
您可能会考虑使用反射。
在这种情况下,在调用时你可以传递一个参数数组:
methodInfo.Invoke(instanceOfClass, parametersArray)
可以看例子:
请注意,在这种情况下,根据MethodBase.Invoke文档,您有一个object[]
数组,因此您必须处理boxing/unboxing
,不知道所有这些努力是否真的值得,只需以普通方式传递参数。
您可能可以使用反射,但我认为这比完整编写的 20 个参数更难看。
如果您只需要在一个位置使用它,我会说只需使用 20 个参数调用它。如果您在多个地方需要它,请在您自己的程序中创建一个包含 20 个参数的函数,并在您自己的程序中在您需要的任何地方调用该函数。
使用诸如 MethodInfo 之类的反射将是您的选择之一。
[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(...)
仅伪代码,未经彻底测试。