0

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

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)
       //...
}

如果我只传递queryStringargs我会收到以下错误:

“System.Web.HttpValueCollection”类型的对象无法转换为“System.Object[]”类型。

意图如何使用object[] parameters论点methodInfo.Invoke()

4

2 回答 2

4

尝试:

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

参数只有1,是一个对象数组。如果你通过args它考虑多个参数。

于 2013-10-11T11:56:45.293 回答
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 });
于 2013-10-11T11:58:04.430 回答