4

问题

这可能是一个非常简单的问题,但它让我困扰了一段时间:InvokeMember 可以接受一个 object[] 表示传递给方法所需的参数。我有两个对象(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

您正在传入一个包含两个元素的数组,因此它将其视为参数数组,寻找具有两个参数的方法。您希望得到一个长度为 1 的数组,其唯一元素是一个对象,该对象也恰好是一个数组(长度为 2)。

选项:

  • 将其转换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 回答