示例 - A() - > B() - > C()
C()包含try-catch,只需记录异常并继续执行,因为throw;
已被注释掉。
因此A()中的try / catch不会触发。
public void A(){
try{
B();
}
catch(Exception e){
//something really important
}
}
public void B(){
try{
throw new Exception("test");
}
catch(Exception e){
Log.Error($"Error - {e.InnerException}");
//throw;
}
//further code
}
是否有任何机制强制A()catch捕获后面的调用堆栈中引发的任何异常?
我问的原因是我需要确保报告付款的任何问题但是在B()的代码中必须有40多次尝试捕获;包含!
答案 0 :(得分:3)
不,除非重新抛出异常,否则无法捕获已处理的异常:
try
{
B();
}
catch(Exception e)
{
// handle the exception
throw; // then re-throw it.
}
如果是用于记录目的,您可能正在寻找AppDomain.FirstChanceException
事件,这使您能够“捕获”异常,即使它们已被处理。
答案 1 :(得分:1)
没有。您需要信任B()来完成它的工作,并准确地报告结果。
B()没有任何保护:
public bool B()
{
var failed = ImportantOperation();
if(failed)
// oops
return true;
else
return true;
}
如果您不信任代码,请自行编写代码或获得您可信赖的代码提供程序。