我有一个问题:
objectType.GetMethod("setValues").Invoke(testClass, arguments);
arguments是一个对象数组,它的任何成员都可以是任何类型的数组,如int [] ??? 我问这个是因为我在传递带有int []数组的参数作为其中的成员时有异常,这是例外:
System.ArgumentException:'System.Object []'类型的对象无法转换为'System.Int32 []'类型。
有什么建议吗?
答案 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