InvokeMember对象[]参数

本文关键字:参数 对象 InvokeMember | 更新日期: 2023-09-27 18:08:00

问题

这可能是一个非常简单的问题,但它让我卡住了一段时间:InvokeMember可以接受一个对象[],该对象表示需要传递给方法的参数。我有两个对象(obj列表,字符串foo)。我可以成功地将任何一个变量传递给方法,但是当我尝试传递两个变量时,我得到一个方法'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更改为接受对象[]时,永远找不到该方法

InvokeMember对象[]参数

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

选项:

  • 将其强制转换为object,使其成为编译器参数数组以构建包装数组

    (object) new object[] { someListOfObjects, stringValue }
    
  • 直接创建数组:

    new object[] { new object[] { someListOfObjects, stringValue } }
    
  • 修改TestMethod参数以匹配数组:

    public static string TestMethod(List<object> foo, string bar)