为什么我们需要在中创建自定义例外 .NET?
特定的海关例外允许您为catch语句分隔不同的错误类型.异常处理的常见构造是:
try {} catch (Exception ex) {}
无论类型如何,这都会捕获所有异常.但是,如果您有自定义异常,则可以为每种类型使用单独的处理程序:
try {} catch (CustomException1 ex1) { //handle CustomException1 type errors here } catch (CustomException2 ex2) { //handle CustomException2 type errors here } catch (Exception ex) { //handle all other types of exceptions here }
因此,特定的例外允许您对异常处理进行更精细的控制.此好处不仅由自定义异常共享,还在.NET系统库中共享所有其他异常类型.
我最近做了一篇关于这个主题的长篇博文:
http://blogs.msdn.com/jaredpar/archive/2008/10/20/custom-exceptions-when-should-you-create-them.aspx
它的关键在于:只有在满足下列条件之一时才创建自定义异常
你实际上希望有人来处理它.
您想记录有关特定错误的信息
所以你也可以自己扔掉它们,然后抓住它们并确切地知道它们的含义.
另外:如果你正在构建一个类库/ framework/api,那么创建一个BaseException通常会很有用,因为代码中的其他异常都会从中继承.然后,当您的代码引发异常时,正在使用它的程序员可以快速了解异常的来源.
因为它可以使您的意图清晰,您还可以使用IDE功能跟踪使用情况.假设您有一个名为"FooBar"的自定义后端系统,并且您创建了一个"FooBarDownException",您可以跟踪此异常的用法,以识别您的应用程序包含的任何自定义逻辑,因为FooBar已关闭.您可以选择捕获此特定类型的异常并忽略其他异常,从而避免异常处理程序中的重载和条件逻辑.它实际上只是强类型的另一个版本.这也意味着您可以避免代码中的注释,因为异常具有显示名称的意图.