调用的目标抛出了异常(MethodBase.Invoke方法)

Cos*_*iță 4 c# reflection exception invoke

我想捕获在使用invoke方法调用的方法中抛出的异常.

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

method.Invoke调用以下方法:

public void Register(/*parameters*/)
{
     if(test_condition())
          throw new CustomException("Exception Message");
}
Run Code Online (Sandbox Code Playgroud)

问题是当我捕获CustomException时,在TestMethod中,catch语句中的e变量没有类型CustomException.它有以下消息:"调用目标已抛出异常".

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

我究竟做错了什么?

Jon*_*eet 10

是的,你通过反射调用方法.因此,根据文档,TargetInvocationException如果目标方法抛出异常,将抛出a .

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

例如:

try     
{
    method.Invoke(commandHandler, new[] { newCommand });
}
catch (TargetInvocationException e)
{     
    ExceptionService.SendException(e.InnerException);
}
Run Code Online (Sandbox Code Playgroud)