我的代码尝试使用 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)
)时,一切正常。
最佳答案
params 实际上是编译器的一种解决方法。后面,参数的真实类型是一个数组。因此,当您执行以下操作时:method.Invoke(obj, new object[] { "01"})
,这是行不通的。你需要这样做:
method.Invoke(obj, new object[] { new string[] {"01"} })
这应该有效。
关于c# - MethodInfo.Invoke 因参数数量可变而引发异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22235490/