c# - MethodInfo.Invoke 因参数数量可变而引发异常

标签 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))时,一切正常。

最佳答案

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/

相关文章:

c# - 根据ViewModel中的属性更改DataGrid的边框颜色

c# - .NET:如何将异常转换为字符串?

c# - 将用户的输入传递给两个重载方法之一并显示返回字符串

c# - 为什么我应该使用属性而不是实现接口(interface)?

golang DeepEqual 和 Reflect.Zero

c# - Entity Framework 中导航属性延迟加载的逻辑

c# - 关闭发布版本的 MVC 编译调试

java - 使用反射访问大型 POJO 的私有(private)字段 : ±1?

c# - 反射:递归地搜索字符串值的对象,然后报告路径

c# - MemberInfo.DeclaringType 上出现奇怪的 Resharper 警告