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

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)etc. の場合、Invoke は次のように呼び出されます。

// the .Invoke method expects an array of parameters...
methodInfo.Invoke(this, new object[] { queryString, somethingElse });
于 2013-10-11T11:58:04.430 に答える