我的代码尝试使用MethodInfo.Invoke调用带有可变数量参数的多个方法,但调用抛出ArgumentException
。造成这种情况的原因是什么?如何解决?
被调用方法的方法签名如下所示:
private static string MethodBeingCalled(params string[] args)
{
//do stuff
return stringToReturn;
}
调用这些方法的代码行如下所示:
string valueReturned = method.Invoke(obj, new object[] { "01" }).ToString();
此行抛出ArgumentException:
Object of type 'System.String' cannot be converted to type 'System.String[]'.
当我更改MethodBeingCalled以获取固定的参数列表(即:MethodBeingCalled(string arg)
)时,一切正常。
答案 0 :(得分:4)
params实际上是编译器的一种解决方法。在后面,参数的实际类型是数组。所以当你这样做时:method.Invoke(obj, new object[] { "01" })
,这是行不通的。你需要这样做:
method.Invoke(obj, new object[] { new string[] {"01"} })
这应该有效。
答案 1 :(得分:1)
请参阅此回答here。它检查存在的ParamArrayAttribute
并将值作为数组传递。