2010-06-30 38 views
0

我有這樣的問題:反射問題:傳遞參數數組爲int []內它

objectType.GetMethod("setValues").Invoke(testClass, arguments); 

參數是對象的數組,可以它的任何部件的任何類型的這樣的INT的陣列[] ??? 我這樣問,因爲我有一個異常時,作爲一個成員傳遞參數作爲一個int []數組,這是例外:

System.ArgumentException:對象的類型'System.Object []'不能被轉換爲類型'System.Int32 []'。

有什麼建議?

+4

我的建議:編寫一個我們可以實際編譯和運行的小程序來演示問題。然後發佈該程序。否則,它只是猜測;我們不知道什麼是參數,objectType,testclass或setValues的簽名是什麼,所以我們不能在心理上診斷問題。 – 2010-06-30 22:42:55

+0

...因爲它可能*不是*迭代器塊的問題,心理調試是處於劣勢;)(http://blogs.msdn.com/b/ericlippert/archive/2007/09/05/psychic-debugging -part-one.aspx,http://blogs.msdn.com/b/ericlippert/archive/2007/09/06/psychic-debugging-part-two.aspx) – 2010-06-30 22:52:13

回答

1

是的,你應該能夠將一個整數數組作爲反射調用的參數之一。從錯誤它看起來像你認爲是一個整數數組實際上是一個對象數組雖然。

0

我的心理調試暗示的setValues簽名看起來是這樣的:

public void setValues(int[] vals); 

而你傳遞一個int[]Invoke,像這樣:

int[] arguments = new int[] { 1, 2, 3 }; 
objectType.GetMethod("setValues").Invoke(testClass, arguments); 

這是不行的,因爲您傳遞給Invokeobject[]已平鋪以創建實際參數列表。換句話說,您的調用等同於調用setValues(1, 2, 3),這不起作用,因爲setValues需要單個int[]參數,而不是一系列int參數。您需要執行以下操作:

int[] values = new int[] { 1, 2, 3 }; 
object[] arguments = new object[] { values }; 
objectType.GetMethod("setValues").Invoke(testClass, arguments);