使用可选参数调用方法

本文关键字:调用 方法 参数 | 更新日期: 2023-09-27 18:34:50

我正在尝试使用一些可选参数根据其名称调用方法:

var methodInfo = this.GetType().GetMethod("Foo", 
                                BindingFlags.NonPublic | BindingFlags.Instance);
var queryString = _httpContext.Request.QueryString;
var somethingElse = new List<int>(){ 1,2,3 };
var args = new object[]{ queryString, somethingElse  };
if(methodInfo != null)
    methodInfo.Invoke(this, args);

private void Foo(object[] args)
{
    foreach(var item in args)
       //...
}

如果我只将queryString传递给args,则会出现以下错误:

类型为"System.Web.HttpValueCollection"的对象不能转换为类型"System.Object[]"。

如何使用methodInfo.Invoke()中的object[] parameters参数?

使用可选参数调用方法

尝试:

methodInfo.Invoke(this, new object[] { args });

参数仅为 1,是一个对象数组。如果传递args它会考虑多个参数。

由于您的方法采用 object[] 类型的单个参数,因此您需要将该参数作为数组传递到另一个数组中。

// this is what is passed to your method as the first parameter
var args = new object[]{ queryString, somethingElse  };
// the .Invoke method expects an array of parameters...
methodInfo.Invoke(this, new object[] { args });

如果你的方法void Foo(string a, List<int> b)等,那么调用将像

// the .Invoke method expects an array of parameters...
methodInfo.Invoke(this, new object[] { queryString, somethingElse });