【发布时间】:2011-12-06 02:42:11
【问题描述】:
我正在尝试使用 C# 中的 .NET 反射调用一个接受两个参数(一个布尔值和一个字符串)的函数。但是,使用以下代码我得到一个异常:
object[] paramList = new object[] { true, "Foo" };
Type wsType = typeof(MyWS);
MyWS inst = (MyWS)Activator.CreateInstance(wsType);
MethodInfo method = wsType.GetMethod(function); // function = the name of the function to be called
method.Invoke(inst, paramList);
这会引发 ArrayTypeMismatchException(“尝试将元素作为与数组不兼容的类型访问。”)。
似乎是 paramList 导致了异常,但我不知道为什么?
我试图调用的函数类似于:
public bool EnableSchedule(bool enable, string password)
{
...
}
【问题讨论】:
-
检查
function变量是否真的包含接受这两个参数的函数的名称。除此之外,您的代码应该可以工作。 -
数组可以包含不同类型的元素,尤其是对象数组。更好地记录您的问题,显示您尝试调用的类型和方法以及异常的堆栈跟踪。
-
除非您提供“函数”的定义(或至少声明),否则它可以帮助您找出问题所在。参数顺序不正确?您的函数是否有可能接收 (string, bool) 而不是 (bool, string)?
-
尝试在
paramList下方添加行function = "EnableSchedule";并再次运行。正如@Hans 所说,堆栈跟踪会告诉你问题出在哪里(我敢打赌你只是调用了错误的函数)。 -
如果方法主体类似于“return true;”,则代码执行没有问题。也许该方法抛出异常而不是您粘贴的这段代码