对于中的无效或意外参数,应引发何种类型的异常.网我什么时候会 Select 一个而不是另一个?
后续行动:
如果您有一个函数需要一个与月份对应的整数,但您传入了‘42’,您会使用哪个异常?即使它不是一个集合,它也会被归入"超出范围"类别吗?
对于中的无效或意外参数,应引发何种类型的异常.网我什么时候会 Select 一个而不是另一个?
如果您有一个函数需要一个与月份对应的整数,但您传入了‘42’,您会使用哪个异常?即使它不是一个集合,它也会被归入"超出范围"类别吗?
我喜欢使用:ArgumentException
、ArgumentNullException
和ArgumentOutOfRangeException
.
ArgumentException
多处不对劲.ArgumentNullException
-参数为空.ArgumentOutOfRangeException
–我不经常使用这个,但一个常见的用法是索引到集合中,并给出一个非常大的索引.还有其他 Select ,它们不太关注论点本身,而是从整体上判断这一呼吁:
InvalidOperationException
–参数可能可以,但不是在对象的当前状态下学分归STW(之前的Yoooder)所有.投票支持his answer票NotSupportedException
–传入的参数是有效的,但在此实现中不受支持.想象一个FTP客户端,你传递了一个客户端不支持的命令.诀窍是抛出一个异常,该异常最好地表达了为什么无法按原样调用该方法.理想情况下,异常应该详细说明出了什么问题、为什么出了问题以及如何修复.
我喜欢错误信息指向帮助、文档或其他资源.例如,微软在知识库文章上迈出了良好的第一步,例如“Why do I receive an "Operation aborted" error message when I visit a Web page in Internet Explorer?”篇.当您遇到错误时,他们会将您指向错误消息中的知识库文章.他们做得不好的是,他们没有告诉你,为什么它失败了.
再次感谢STW(前Yoooder)的 comments
作为对你后续行动的回应,我会投ArgumentOutOfRangeException
分.看看MSDN对这个例外的看法:
掷
ArgumentOutOfRangeException
因此,在本例中,您传递的是一个值,但这不是一个有效的值,因为您的范围是1-12.但是,您记录它的方式清楚地表明了您的API抛出了什么.因为虽然我可能会说ArgumentOutOfRangeException
个,但另一个开发人员可能会说ArgumentException
个.让它变得简单,并记录下行为.