例外与验证

Pro*_*ofK 5 .net c#

我刚遇到一个捕获异常的属性设置器(所有异常;我知道这很糟糕,但这里没有关系),记录它们.首先,我认为应该再次通过它们; 为什么等到崩溃和日志研究,你什么时候才能知道什么是错的?

但是,我的主要问题是,我是否对无效的日期值进行验证,将RuleViolation对象添加到我的文档上的ValidationRules对象,或者抛出InvalidDate异常,或者让CLR为我抛出​​异常(无效日期只是无效的日期,未检查范围等)

Cha*_*ana 2

每当方法或类成员无法完成其设计要完成的任何任务时,就应该抛出异常。

因此对于属性设置器来说,如果设置器无法设置属性,那么它应该抛出异常。

至于是否应该捕获它并重新抛出它,答案是肯定的,但前提是您需要在将异常传递到堆栈之前立即在 setter 中处理异常……但记录它并不是这样做的理由。一般来说,您应该在更高级别实现异常的横切日志记录,其中异常不会被重新抛出...如果您正在处理堆栈中较高位置的那些横切关注点,那么就不会,绝对不要捕获并重新抛出相同的异常。

但是,如果您正在编写一个工具或框架库,您希望组件的客户端具有一组明确定义的预期异常,并且您已经定义了组件将向客户端代码抛出的自定义异常以及哪个客户端如果组件期望看到,那么您可能需要捕获 CLR 生成的异常并重新抛出您自己的自定义异常。 在将其向上传递到堆栈之前,始终将实际的底层异常包含在您的自定义异常“InnerException”属性中,以便数据它可供最终使用它的任何系统使用。