Delegate.DynamicInvoke - 捕获异常

时间:2014-02-22 12:35:01

标签: c# exception delegates

我使用以下方法调用委托(动态可配置服务):

public void CallService (Delegate service, IContext ctx)
{
    var serviceArgs = CreateServiceArguments(service, ctx);
    service.DynamicInvoke(serviceArgs);
}

此时我想捕获调用的服务方法中发生的所有异常,但是,我不想捕获由于DynamicInvoke调用而发生的任何异常。 E.g:

  • service委托投掷DomainException - >抓住例外
  • DynamicInvoke()抛出MemberAccessException,因为委托是私有方法 - >不要抓住异常,让它冒出来

我希望很清楚我在问什么。如何确定catched异常是来自DynamicInvoke调用本身还是来自底层委托。

哦是的,并且:我不能使用异常类型来决定!完全有可能服务本身也会抛出一个MemberAccessException,因为它本身可以做一些委托事件......

1 个答案:

答案 0 :(得分:4)

  

哦是的,并且:我不能使用异常类型来决定!完全有可能服务本身也会抛出一个MemberAccessException,因为它本身可以做一些委托事件......

是的,您可以使用例外类型来决定。正如Delegate.DynamicInvoke的文档中所提到的,如果被调用的方法抛出异常(任何异常),它将被包装在TargetInvocationException中。这是您可以捕获的异常,然后您可以查看其InnerException属性以了解它是否是您可以处理的异常。