c# - InvokeMember 对象[] 参数

标签 c# object

问题

这可能是一个非常简单的问题,但它让我卡住了一段时间: 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 更改为接受一个对象[]时,该方法从未找到。

最佳答案

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

选项:

  • 将其转换为object,使其成为编译器参数数组以构建一个环绕数组

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

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

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

关于c# - InvokeMember 对象[] 参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15885314/

相关文章:

javascript - 在单个常量中使用 Object.keys()、map()、...Array()、reduce() 和 concat()

json - 如何展开 JSON 对象?

javascript - 如何在下面的 `value: _value(this.from, this.to, line)` 行中获得 DRY?

c# - 使用 C# 中的 SQL Server 存储过程插入 NULL DateTime

c# - 防止将特定异常记录到 App Insights

c# - 调试二叉树

javascript - 在 Javascript 中遍历字典

Java 垃圾回收和大对象

c# - 从 linqpad 或控制台应用程序运行 asp.net mvc 应用程序

c# - 如何将整数转换为红色、绿色和蓝色值