【发布时间】:2011-10-07 13:03:30
【问题描述】:
在我们的集成项目中,我们使用反射动态地委托给一系列特定的处理器对象。
var genericType = typeof(IMessageProcessor<>).MakeGenericType(parseResponse.DomainMessage.GetType());
var miProcessMessage = genericType.GetMethod("ProcessMessage");
miProcessMessage.Invoke(processor, new object[] { parseResponse.DomainMessage });
现在,在某些情况下,其中一个处理器需要抛出一个特定的异常,在这种情况下,当他在预期位置找不到文件时。
throw new ResourceNotFoundException(string.Format("Could not find file {0}", filePath));
我们的处理器想要检查此异常以确定是否需要重试或中止处理(基于基于时间的机制,此处不相关)。
catch(ResourceNotFoundException ex)
{
// do stuff
}
问题在于调用显然“吞下了”特定的 ResourceNotFoundException 并重新抛出 System.Exception 说“调用的目标已抛出异常。”
有没有什么方法可以通过反射来保留实际抛出 ResourceNotFoundException 而不是 Exception 的事实?
【问题讨论】:
标签: .net reflection exception-handling invoke