调用目标(MethodBase.Invoke 方法)已引发异常

2023-12-03

我想捕获使用 invoke 方法调用的方法中引发的异常。

public void TestMethod()
{
   try     
   {
       method.Invoke(commandHandler, new[] { newCommand });
   }
   catch(Exception e)
   {     
       ExceptionService.SendException(e);
   }
}

method.Invoke 调用以下方法:

public void Register(/*parameters*/)
{
     if(test_condition())
          throw new CustomException("Exception Message");
}

问题是,当我在 TestMethod 中捕获 CustomException 时,catch 语句中的 e 变量不是 CustomException 类型。它具有以下消息:“调用目标已引发异常”。

我想捕获已引发的异常(即 CustomException),并将其传递给 ExceptionService 机制。

我究竟做错了什么?


是的,您正在通过反射调用该方法。所以按照文档, a TargetInvocationException如果目标方法抛出异常,则会抛出异常。

只需使用InnerException属性来获取 - 并可能抛出 - 原始异常。

例如:

try     
{
    method.Invoke(commandHandler, new[] { newCommand });
}
catch (TargetInvocationException e)
{     
    ExceptionService.SendException(e.InnerException);
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

调用目标(MethodBase.Invoke 方法)已引发异常 的相关文章

随机推荐