小编典典

.NET 中的无效或意外参数应引发哪些异常?

all

.NET 中的无效或意外参数应引发哪些类型的异常?我什么时候会选择一个而不是另一个?

跟进:

如果你有一个函数需要一个对应于一个月的整数并且你传入了‘42’,你会使用哪个例外?即使它不是一个集合,这是否会属于“超出范围”类别?


阅读 64

收藏
2022-07-17

共1个答案

小编典典

我喜欢使用:ArgumentException、、ArgumentNullExceptionArgumentOutOfRangeException

还有其他选项,它们不会过多地关注论点本身,而是从整体上判断调用:

诀窍是抛出最能说明为什么不能按原样调用方法的异常。理想情况下,异常应该详细说明出了什么问题,为什么是错误的,以及如何修复它。

我喜欢错误消息指向帮助、文档或其他资源。例如,Microsoft 在他们的知识库文章中迈出了良好的第一步,例如“为什么我在 Internet
Explorer
中访问网页时会收到“操作中止”错误消息?”
。当您遇到错误时,他们会将您指向错误消息中的知识库文章。他们没有做得好的是他们没有告诉你,为什么具体失败了。

再次感谢 STW(前 Yoooder)的评论。


作为对您的跟进的回应,我会抛出一个ArgumentOutOfRangeException. 看看 MSDN
关于这个异常的说法:

ArgumentOutOfRangeException当调用方法并且传递给该方法的至少一个参数不是空引用(Nothing在 Visual
Basic 中)并且不包含有效值时引发。

因此,在这种情况下,您传递了一个值,但这不是一个有效值,因为您的范围是 1-12。但是,您记录它的方式清楚地表明您的 API
抛出了什么。因为虽然我可能会说ArgumentOutOfRangeException,但另一个开发人员可能会说ArgumentException。让它变得简单并记录行为。

2022-07-17