难以给出正确的标题,对此感到抱歉。将数组转换为单个元素传递给函数
我有一个类(我不能修改)具有功能
f(string arg1, string arg2, ..., string n)
。
我有一个数组var arr = new string[n] { ..... }
我怎么能转换阵列项目FO功能f
传递,而不需要写
f(arr[0], arr[1], ..., arr[n-1])
?
难以给出正确的标题,对此感到抱歉。将数组转换为单个元素传递给函数
我有一个类(我不能修改)具有功能
f(string arg1, string arg2, ..., string n)
。
我有一个数组var arr = new string[n] { ..... }
我怎么能转换阵列项目FO功能f
传递,而不需要写
f(arr[0], arr[1], ..., arr[n-1])
?
您可能会考虑使用反射。
在这种情况下,调用鸥有可能传递参数数组:
methodInfo.Invoke(instanceOfClass, parametersArray)
可以看一下例子:
Reflection: How to Invoke Method with parameters
保持atention的事实是,在这个 case根据MethodBase.Invoke文档你有一个object[]
数组,所以你必须处理boxing/unboxing
,不知道这一切努力真的值得,只是简单地通过参数,以平常的方式。
我没有想到这件事,你是对的。我会在几个小时内看看它,然后回到你身边。谢谢! – Marco 2013-03-06 13:01:26
在我的具体情况下,它可能不值得(参数是20),但只是有一个想法,如果我需要更长的时间。我关心的是代码的可读性:写下'arr [0],....,arr [19]'并不好笑,也不可维护......你怎么看? – Marco 2013-03-06 13:03:45
@Marco:好吧,如果唯一的conern是*可读性*和* scallability *它值得去看看这个解决方案。在其他情况下,只要保持一贯的做事方式。 – Tigran 2013-03-06 13:05:26
使用诸如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(...)
伪代码只,未经过彻底测试。
您应该可以使用反射,例如 – Esailija 2013-03-06 12:55:32
N是如何指定的?我的意思是,它不可能是动态的,因为你有一个具有N个参数的函数? – ken2k 2013-03-06 12:56:33
@Esailija:好的,我可以,但是使用Reflection编写函数比手动编写参数困难。当然,如果他们是少数(我有20) – Marco 2013-03-06 12:57:05