调用目标抛出异常(MethodBase.Invoke 方法)
Exception has been thrown by the target of an invocation (MethodBase.Invoke Method)
我想捕获在使用 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 类型。它有以下消息:"Exception has been thrown by the target of an invocation".
我想捕获已引发的异常(即 CustomException),并将其传递给 ExceptionService 机制。
我做错了什么?
是的,您正在通过反射调用该方法。因此,如果目标方法抛出异常,将抛出 the documentation, a TargetInvocationException
。
只需使用 InnerException
属性 即可获取并可能抛出原始异常。
例如:
try
{
method.Invoke(commandHandler, new[] { newCommand });
}
catch (TargetInvocationException e)
{
ExceptionService.SendException(e.InnerException);
}
我想捕获在使用 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 类型。它有以下消息:"Exception has been thrown by the target of an invocation".
我想捕获已引发的异常(即 CustomException),并将其传递给 ExceptionService 机制。
我做错了什么?
是的,您正在通过反射调用该方法。因此,如果目标方法抛出异常,将抛出 the documentation, a TargetInvocationException
。
只需使用 InnerException
属性 即可获取并可能抛出原始异常。
例如:
try
{
method.Invoke(commandHandler, new[] { newCommand });
}
catch (TargetInvocationException e)
{
ExceptionService.SendException(e.InnerException);
}