尝试使用任意数量的参数调用方法:
Type objType = obj.GetType();
MethodInfo method = objType.GetMethod("InvokedMethod");
method.Invoke(obj, new string[] { "param1", "param2" });
方法签名如下:
public void InvokedMethod(params string[] args) { ... }
为什么我会遇到以下异常:
System.Reflection.TargetParameterCountException (Parameter count mismatch)
答案 0 :(得分:5)
方法不接受接受两个参数,它接受一个数组参数。编译器将执行转换,以便将两个字符串的方法调用转换为具有两个值的单个数组的调用。使用反射时,这种转变不会为你完成。您需要显式创建一个数组并将两个值放入其中:
method.Invoke(obj, new object[] { new[]{"param1", "param2"} });
请记住,Invoke
也不接受该参数的单个值。它接受一组所有参数。将new string[] { "param1", "param2" }
传递给Invoke
告诉Invoke
您有两个参数,每个参数都是字符串。您需要将一个数组参数包装在另一个数组中,以便Invoke
看到您有一个本身就是数组的参数。
答案 1 :(得分:0)
试试这个: method.Invoke(obj,new object [] {new string [] {“param1”,“param2”}});
.Invoke接受一个表示整个签名的参数数组。在你的情况下,第一个参数应该是一个字符串数组。所以你必须传入一个对象数组,第一个元素是字符串数组。