我使用以下方法调用委托(动态可配置服务):
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,因为它本身可以做一些委托事件......
答案 0 :(得分:4)
哦是的,并且:我不能使用异常类型来决定!完全有可能服务本身也会抛出一个MemberAccessException,因为它本身可以做一些委托事件......
是的,您可以使用例外类型来决定。正如Delegate.DynamicInvoke
的文档中所提到的,如果被调用的方法抛出异常(任何异常),它将被包装在TargetInvocationException
中。这是您可以捕获的异常,然后您可以查看其InnerException
属性以了解它是否是您可以处理的异常。