我想写一个处理异常的方法,这将被称为catch
块内的方法。根据通过的异常类型,异常无论是作为一个新的异常的内部异常传递或者干脆重新抛出。如何在第二种情况下保留堆栈跟踪?C#重新抛出异常的设计来处理异常和保存堆栈跟踪
例子:
public void TestMethod()
{
try
{
// can throw an exception specific to the project or a .Net exception
SomeWorkMethod()
}
catch(Exception ex)
{
HandleException(ex);
}
}
private void HandleException(Exception ex)
{
if(ex is SpecificException)
throw ex; //will not preserve stack trace...
else
throw new SpecificException(ex);
}
我不希望做的是,因为该模式是重复的很多地方,不会有分解:
try
{
SomeWorkMethod();
}
catch(Exception ex)
{
if(ex is SpecificException)
throw;
else
throw new SpecificException(ex);
}
你为什么不使用类似 “如果抛出(HandleException(前)!);”。我知道这是不是正是你想要的,但它很简单,而不是什么大不了的事,如第二个例子。 – Julo
你为什么不具备的'SpecificException'一个单独的收获? catch(SpecificException e){throw;}' – juharr