繁体   English   中英

何时使用用户定义的Exception和一些好的示例/最佳实践?

[英]When to use a user defined Exception and some good examples/best Practices?

我会假设大多数用户定义的异常都是针对业务逻辑级别的异常,但是使用用户定义的异常有哪些充分的理由,有哪些很好的示例呢?

用户定义的异常唯一的优点就是可以定义一致的错误消息?

可以在异常内部编写什么逻辑以使它们真正更有用?

毕竟,您不能只是这样做: throw new Exception("Some Error Message");

拥有用户定义的异常很有用,因为它允许您以特定方式处理各种错误。 如果.NET可以将所有异常作为System.Exception抛出并带有不同的文本消息,为什么.NET会定义这么多种不同类型的异常? .NET中存在不同类型的异常的原因是,您可以捕获各种类型的错误并以不同的方式处理它们。 这就是您定义自己的用户异常的相同原因-因此您可以根据发生的异常类型提供不同的响应。

您还可以创建包含其他数据的用户定义的异常。 例如,您可以基于枚举,整数错误代码或可能对调用程序有用的其他任何东西来定义严重性级别,以识别出问题所在。 至于要包含在异常中的逻辑,我通常只是尝试报告出了什么问题,然后将逻辑(如何处理错误)留给调用程序。 在某些情况下,如果异常代码已超过某个严重性级别(例如,抛出警告,但仅将严重错误写入日志文件),则异常代码会自动将错误写入日志文件。

您应该创建很少的用户定义异常。 仅当有人要捕获异常并对异常进行特定操作时,才应使用它们。 如果抛出异常而不是InvalidOperationException不会使代码的行为不同,则抛出InvalidOperationException

.NET框架中已经有很多异常,如果可以找到可以用于特殊情况的异常,则应使用这些异常。

例如,在我的配置类(通常是ConfigurationManager包装器)中,当无法正确解析值时,会抛出ConfigurationErrorsException

当从文本或其他需要特定格式的文件中解析自定义值并且解析失败时,我抛出FormatException

但是,如果我的BankAccount对象中没有足够的钱来提取10英镑,那么我将编写并抛出InsufficentFundsException因为这样我就可以处理该特定的错误情况(如果发生的话)。

希望这(有所帮助)。

不,它们不仅用于消息。 您可以在catch块的例外列表中查找用户定义的对象。

catch(UserDefinedException){}
catch(Exception){}

您可以随时使用“用户定义的异常”来查找发生的特定事件。 客户端ID可能不在指定范围内,并且您要专门查找该ID。 不必解析错误消息(这可能会很痛苦,并且容易出错,例如消息稍后会更改),您可以使用一个异常,并且您知道代码中的其他地方专门在告诉您您“嘿,这件事发生了。您需要意识到这一点。”

可以在组件内使用用户定义的异常,以使组件的使用者能够以比catch(Exception)块更高的粒度来捕获它们。 这将使组件使用者能够根据抛出的异常执行不同的任务。 仅当确实期望消费者将使用它们以这种方式进行区分时,才应真正创建用户定义的异常。

您还可以添加属性以存储带有用户定义的异常的其他元数据,例如错误代码(例如,在调用非托管API时)。 这比简单地将内容放入Exception对象的Data属性更加用户友好。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM