很难给出正确的标题,对不起。
我有一个功能
的课程(我无法修改) f(string arg1, string arg2, ..., string n)
。
我有一个数组var arr = new string[n] { ..... }
如何在不需要编写
的情况下将数组项转换为函数f
f(arr[0], arr[1], ..., arr[n-1])
?
答案 0 :(得分:3)
您可以考虑使用反射。
在这种情况下,在调用上,你可以传递一组参数:
methodInfo.Invoke(instanceOfClass, parametersArray)
可以查看示例:
Reflection: How to Invoke Method with parameters
请注意,根据MethodBase.Invoke文档,此案例中您有一个object[]
数组,因此您必须处理boxing/unboxing
,不要不知道所有这些努力真的值得,只是简单地以普通的方式传递参数。
答案 1 :(得分:2)
你可能可以使用反射,但我认为这比完全写的20个参数更难看。
如果你只在一个地方需要它,我会说用20个参数调用它。如果您需要在多个地方使用它,请在您自己的程序中创建一个包含20个参数的函数,并在您自己的程序中随处调用该函数。
答案 2 :(得分:0)
使用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(...)
仅限伪代码,未经过全面测试。