正确使用自定义异常
Proper use of custom exceptions
我正在创建一个函数,希望它在遇到错误时能够给出有意义的错误消息。
我想问一下这种情况是否是自定义异常的正确使用,如果不是正确的处理方式。
示例:
int res = a - b;
if (res < 0)
throw new MyCustomeExp("Invalid input. 'a' should be larger than 'b'.");
为此目的使用自定义异常是否合适?
谢谢。
你也可以use Trace.Assert()
:
int a = 42
int b = 56
Trace.Assert ( a > b );
...
您应该在极少数情况下使用自定义异常。
您的第一个过滤器应该是 "Am I going to catch (MyCustomExc x)
anywhere at all?" 如果答案是 "no" 您不需要自定义过滤器。答案可能有点棘手,具体取决于您记录内容的方式,您的 catch
可能根本不是问题,而是您应用程序之外其他地方的触发器(例如:在记录某些异常时发送电子邮件)
第二个过滤器是检查没有合适的和更通用的。如果有标准的 - 使用它。
第三个过滤器 - 你真的需要异常还是应该将某些东西返回给调用者。
如果您仍然想要自定义异常,请考虑它应该继承什么,并确保 仅 和 始终 使用您的自定义异常它适用的情况 - 不要在一般例外情况下来回走动。
我正在创建一个函数,希望它在遇到错误时能够给出有意义的错误消息。
我想问一下这种情况是否是自定义异常的正确使用,如果不是正确的处理方式。
示例:
int res = a - b;
if (res < 0)
throw new MyCustomeExp("Invalid input. 'a' should be larger than 'b'.");
为此目的使用自定义异常是否合适?
谢谢。
你也可以use Trace.Assert()
:
int a = 42
int b = 56
Trace.Assert ( a > b );
...
您应该在极少数情况下使用自定义异常。
您的第一个过滤器应该是 "Am I going to catch (MyCustomExc x)
anywhere at all?" 如果答案是 "no" 您不需要自定义过滤器。答案可能有点棘手,具体取决于您记录内容的方式,您的 catch
可能根本不是问题,而是您应用程序之外其他地方的触发器(例如:在记录某些异常时发送电子邮件)
第二个过滤器是检查没有合适的和更通用的。如果有标准的 - 使用它。
第三个过滤器 - 你真的需要异常还是应该将某些东西返回给调用者。
如果您仍然想要自定义异常,请考虑它应该继承什么,并确保 仅 和 始终 使用您的自定义异常它适用的情况 - 不要在一般例外情况下来回走动。