4

問題

これは非常に単純な質問かもしれませんが、しばらくの間行き詰まっていました。InvokeMember は、メソッドに渡すために必要なパラメーターを表す object[] を受け入れることができます。2 つのオブジェクト (obj のリスト、文字列 foo) があります。どちらの変数もメソッドに正常に渡すことができますが、両方を渡そうとすると、Method 'x' NotFound 例外が発生します。

詳細

メソッドの呼び出し:

classtype.InvokeMember(someMethodName, 
            BindingFlags.Public | BindingFlags.InvokeMethod|BindingFlags.Static,
            null,
            null,
            new object[]{ someListOfObjects, stringValue});

受信方法:

public static string TestMethod(object foo)
{
    return "foo";
}

注: 渡すとき、new object[]{someListOfObjects}またはnew object[]{stringValue}目的のメソッドに到達すると、期待どおりに到達しますが、両方を渡そうとすると、メソッドが見つかりません。TestMethod の着信パラメーターは正しいですか?

オブジェクト [] を受け入れるように TestMethod を変更すると、メソッドが見つかりません。

4

1 に答える 1

10

2 つの要素を持つ配列を渡すので、それを引数配列と見なし、2 つのパラメーターを持つメソッドを探します。唯一の要素がたまたま配列 (長さ 2) であるオブジェクトである、長さ 1 の配列になりたいとします。

オプション:

  • objectラッピング配列を作成するコンパイラー・パラメーター配列になるようにキャストします。

    (object) new object[] { someListOfObjects, stringValue }
    
  • 自分で配列を直接作成します。

    new object[] { new object[] { someListOfObjects, stringValue } }
    
  • TestMethod配列に一致するようにパラメーターを変更します。

    public static string TestMethod(List<object> foo, string bar)
    
于 2013-04-08T17:31:55.590 に答える