難以給出正確的標題,對此感到抱歉。將數組轉換爲單個元素傳遞給函數
我有一個類(我不能修改)具有功能
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