我正在尝试使用一些可选参数调用基于它的名称的方法:
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 []'类型。
object[] parameters
中的methodInfo.Invoke()
参数如何被用作?
答案 0 :(得分:4)
尝试:
methodInfo.Invoke(this, new object[] { args });
参数仅为1,是一个对象数组。如果您通过args
,则会考虑多个参数。
答案 1 :(得分:1)
由于您的方法采用类型为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 });