【发布时间】:2018-04-04 16:07:54
【问题描述】:
有没有办法确定之前是否已捕获(并重新抛出)异常?例如:
public void Main()
{
try
{
Child();
}
catch( Exception ex)
{
// do something only if exception was not already in another catch block
}
}
public void Child()
{
try
{
A_ThisMayThrowException();
}
catch (Exception ex)
{
LogError();
throw;
}
B_ThisMayAlsoThrowAnErrorButWillNotBeCaughtHere();
}
在 Main 函数的 catch 块中,有没有办法确定异常是否已在 Child 函数中捕获?
【问题讨论】:
-
您可以包装异常,然后使用
catch (Exception ex) when (!(ex is MyExceptionType))。或者,您也许可以检查堆栈跟踪。 (参见 System.Diagnostics 命名空间)。 -
您可以使用自定义类型的 Exception 扩展 Exception,您可以在其中留下该信息。
-
抛出一些自定义异常并在父级忽略它
-
是的,我就是这么想的,但我想知道是否有内置的方法来解决这个问题。
-
没有内置方式