1

很难给出正确的标题,对此感到抱歉。

我有一个带有函数的类(我不能修改)

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

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

如何f在无需编写的情况下将数组项转换为传递函数

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

4

3 回答 3

3

您可能会考虑使用反射。

在这种情况下,在调用时你可以传递一个参数数组:

methodInfo.Invoke(instanceOfClass, parametersArray)

可以看例子:

反射:如何使用参数调用方法

请注意,在这种情况下,根据MethodBase.Invoke文档,您有一个object[]数组,因此您必须处理boxing/unboxing,不知道所有这些努力是否真的值得,只需以普通方式传递参数。

于 2013-03-06T12:56:54.737 回答
2

您可能可以使用反射,但我认为这比完整编写的 20 个参数更难看。

如果您只需要在一个位置使用它,我会说只需使用 20 个参数调用它。如果您在多个地方需要它,请在您自己的程序中创建一个包含 20 个参数的函数,并在您自己的程序中在您需要的任何地方调用该函数。

于 2013-03-06T12:57:38.833 回答
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(...)

仅伪代码,未经彻底测试。

于 2013-03-06T13:04:46.090 回答