这可能是一个非常简单的问题,但它让我停留了一段时间: 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更改为接受object []时,永远找不到该方法。
答案 0 :(得分:9)
你传入一个包含两个元素的数组,因此它将其视为参数数组,查找具有两个参数的方法。你想得到一个长度为1的数组,它的唯一元素是一个对象,它也恰好是一个数组(长度为2)。
选项:
将其强制转换为object
,以便编译器参数数组构建一个包装数组
(object) new object[] { someListOfObjects, stringValue }
自己直接创建数组:
new object[] { new object[] { someListOfObjects, stringValue } }
修改TestMethod
参数以匹配数组:
public static string TestMethod(List<object> foo, string bar)