对于中的无效或意外参数,应引发何种类型的异常.网我什么时候会 Select 一个而不是另一个?

后续行动:

如果您有一个函数需要一个与月份对应的整数,但您传入了‘42’,您会使用哪个异常?即使它不是一个集合,它也会被归入"超出范围"类别吗?

推荐答案

我喜欢使用:ArgumentExceptionArgumentNullExceptionArgumentOutOfRangeException.

还有其他 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个.让它变得简单,并记录下行为.

.net相关问答推荐

.NET restore/build在使用组织包的Github Action工作流中调用时获得401

我的Azure应用服务从哪里获取应用设置?

Visual Studio 2022 中的目标操作系统和目标运行时有什么区别?

是否必须使用 Visual Studio 预览才能使用 MAUI?

一种消耗(所有字节)BinaryReader 的优雅方式?

带有输入字段的消息框

无法加载文件或程序集'System.ComponentModel.Annotations,版本 = 4.1.0.0

是否可以更改 Winforms 组合框以禁用输入?

C# 的浮点比较函数

在未安装 Visual Studio 的机器上使用 FUSLOGVW.EXE

如何从 .NET 读取 PEM RSA 私钥

将月份 int 转换为月份名称

功能说明

泛型类的默认构造函数的语法是什么?

obj 文件夹是为了什么而生成的?

在 .NET 中乘以时间跨度

有没有一种简单的方法来判断 .NET Framework 版本?

Uri.Host 和 Uri.Authority 有什么区别

C#/.NET 中仅命名空间的类可见性?

连接字符串而不是使用一堆 TextBlocks