将数组转换为单个元素以传递给函数

时间:2013-03-06 12:53:30

标签: c# arrays

很难给出正确的标题,对不起。

我有一个功能

的课程(我无法修改)

f(string arg1, string arg2, ..., string n)

我有一个数组var arr = new string[n] { ..... }

如何在不需要编写

的情况下将数组项转换为函数f

f(arr[0], arr[1], ..., arr[n-1])

3 个答案:

答案 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(...)

仅限伪代码,未经过全面测试。