我已经阅读了关于C#异常处理实践的几个问题,但好像没有一个是我要问的。
如果我为一个特定的类或一组类实现自己的自定义异常。那么与这些类相关的所有错误都应该使用内部异常封装到我的异常中,还是应该让它们逐层传递下去?
我认为最好捕获所有异常,因此可以立即从我的源代码中识别异常。同时我仍然将原始异常作为内部异常传递。另一方面,我认为重新抛出异常会是多余的。
异常:
class FooException : Exception
{
//...
}
选项1:Foo封装了所有异常:
class Foo
{
DoSomething(int param)
{
try
{
if (/*Something Bad*/)
{
//violates business logic etc...
throw new FooException("Reason...");
}
//...
//something that might throw an exception
}
catch (FooException ex)
{
throw;
}
catch (Exception ex)
{
throw new FooException("Inner Exception", ex);
}
}
}
选项2:Foo抛出特定的FooExceptions,但允许其他异常(如未处理异常)继续传播:
class Foo
{
DoSomething(int param)
{
if (/*Something Bad*/)
{
//violates business logic etc...
throw new FooException("Reason...");
}
//...
//something that might throw an exception and not caught
}
}