反射问题:在其中传递带有int []的arguments数组

时间:2010-06-30 22:38:41

标签: c# reflection

我有一个问题:

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

arguments是一个对象数组,它的任何成员都可以是任何类型的数组,如int [] ??? 我问这个是因为我在传递带有int []数组的参数作为其中的成员时有异常,这是例外:

System.ArgumentException:'System.Object []'类型的对象无法转换为'System.Int32 []'类型。

有什么建议吗?

2 个答案:

答案 0 :(得分:1)

是的,你应该能够将一个整数数组作为参数之一传递给反射调用。从错误来看,它看起来像你认为的整数数组实际上是一个对象数组。

答案 1 :(得分:0)

我的通灵调试表明setValues的签名如下:

public void setValues(int[] vals);

您正在将int[]传递给Invoke,如下所示:

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

这不起作用,因为传递给object[]的{​​{1}}被展平以创建实际的参数列表。换句话说,您的调用等同于调用Invoke,这不起作用,因为setValues(1, 2, 3)需要单个setValues参数,而不是一系列int[]参数。您需要执行以下操作:

int