我已经阅读了一些关于 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
}
}