要抛出异常,我通常使用内置的异常类,例如ArgumentNullExceptionNotSupportedException.但是,有时我需要使用自定义异常,在这种情况下,我写道:

class SlippedOnABananaException : Exception { }
class ChokedOnAnAppleException : Exception { }

等等然后我在代码中抛出并捕获这些.但是今天我遇到了ApplicationException班——我应该用它来代替吗?这是干什么用的?

有很多名称不同的、实际上完全相同的异常类(我通常不需要任何单独的功能),这似乎是低效的.但我不喜欢捕捉一个通用的ApplicationException,并且必须使用额外的代码来确定错误是什么.

ApplicationException应该与我的代码相匹配吗?

推荐答案

根据MSDN中的remarks:

用户应用程序(而不是公共语言运行库)引发从ApplicationException类派生的自定义异常.ApplicationException类区分由应用程序定义的异常和由系统定义的异常.

如果设计的应用程序需要创建自己的异常,建议您从Exception类派生自定义异常.最初认为自定义异常应该派生自ApplicationException类;然而,在实践中,这并没有带来显著的价值.有关更多信息,请参阅处理异常的最佳实践.

Exception派生出它们.此外,我不认为为您的 case 创建新的例外有什么问题,只要这是正当的.如果您遇到框架中已有异常的情况,请使用该异常,否则,请使用您自己的异常.

.net相关问答推荐

删除数据库项目中的表

为什么 PropertyInfo.SetValue 在此示例中不起作用以及如何使其起作用?

即时窗口中的动态导致Microsoft.CSharp.RuntimeBinder.Binder未定义或导入错误

是否有任何为 C# 编写的模糊搜索或字符串相似函数库?

使用 Windows 服务和 C# 检测 USB 驱动器插入和移除

如何在 EF 代码优先中禁用链接表的级联删除?

OpenCV的.Net(dotNet)包装器?

如何等到远程 .NET 调试器附加

为什么 C# 多维数组不实现 IEnumerable

多个等待与 Task.WaitAll - 等效?

如何在 C# 中序列化异常对象?

从 List 到数组 T[] 的转换

将接收到的对象转换为 List 或 IEnumerable

如何在 WebBrowser 控件中注入 Javascript?

在 C# 中,为什么不能将 List 对象存储在 List 变量中

在 .NET Core 中在 MVC 之外使用 Razor

使 HashSet 不区分大小写

接口属性的 XML 序列化

如何隐藏 WPF ListView 的标题?

如何从 HashSet 中检索实际项目?