首页 >后端开发 >C++ >为什么在调用参数化方法时我的反射代码会抛出'对象与目标类型不匹配”?

为什么在调用参数化方法时我的反射代码会抛出'对象与目标类型不匹配”?

DDD
DDD原创
2025-01-18 02:46:13349浏览

Why Reflection Code Throws "object does not match target type"

使用反射调用带参数的方法

问题描述:

尝试通过反射调用带参数的方法时,遇到异常“对象与目标类型不匹配”。但是,如果调用不带参数的方法,则可以成功执行。

解决方案:

要解决此问题,请确保在调用方法时使用了正确的实例。在“else”块中的以下行中,将“methodInfo”替换为“classInstance”:

<code class="language-csharp">result = methodInfo.Invoke(classInstance, parametersArray);</code>

详细解释:

在面向对象编程中,每个方法都与一个对象实例关联。通过反射调用方法时,务必提供正确的实例以执行调用。在提供的代码中,“Run”方法定义为“Main”类的实例方法。因此,必须在该类的实例上调用它。

最初,尝试使用“methodInfo”作为“Invoke”方法的第一个参数来调用该方法。但是,“methodInfo”表示MethodInfo对象,而不是“Main”类的实例。“classInstance”变量(之前使用“Activator.CreateInstance”创建)保存了应该用于调用的实例。

通过修改代码以使用“classInstance”作为第一个参数调用方法,提供了正确的实例,并且该方法可以成功地使用指定的参数调用。

修改后的代码:

<code class="language-csharp">...
if (parameters.Length == 0)
{
    // 这部分工作正常
    result = methodInfo.Invoke(classInstance, null);
}
else
{
    object[] parametersArray = new object[] { "Hello" };

    // 现在调用可以正常工作了
    result = methodInfo.Invoke(classInstance, parametersArray);
}
...</code>

以上是为什么在调用参数化方法时我的反射代码会抛出'对象与目标类型不匹配”?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn