MethodInfo.Invoke为可变数量的参数抛出异常

时间:2014-03-06 20:41:38

标签: c# reflection

我的代码尝试使用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))时,一切正常。

2 个答案:

答案 0 :(得分:4)

params实际上是编译器的一种解决方法。在后面,参数的实际类型是数组。所以当你这样做时:method.Invoke(obj, new object[] { "01" }),这是行不通的。你需要这样做:

method.Invoke(obj, new object[] { new string[] {"01"} })

这应该有效。

答案 1 :(得分:1)

请参阅此回答here。它检查存在的ParamArrayAttribute并将值作为数组传递。