c# - 自定义异常类

标签 c# .net exception

我有一个抽象类 Camera。有一些派生类可以处理特定类型的相机。每种类型的相机都有自己的异常,而其中一些根本没有异常,它们返回一个错误类型的枚举。

我想知道你们是否同意这个实现:

所有特定类都会处理它们的异常(或枚举错误类型)并将其转换为通用异常(例如:CameraException : Exception)并抛出。

这是一个好的/推荐的实现方式吗?

最佳答案

您可能希望将错误概念统一为一个通用的 CameraException类层次结构。如果目标是抽象相机实现,您应该将错误也抽象到这个通用异常框架中。

如果您只有特定于实现的异常,那么您的类的用户将很难理解 CameraException 的确切含义。不分析细节就想说。

我建议提供一个逻辑异常框架,然后您的依赖于实现的相机逻辑将解释代码,然后创建正确的相应逻辑相机异常。

例如,如果您尝试对相机的内存、卡执行操作,但没有插入,则抛出 NoMemoryCardInCameraException可以继承自 CameraException .

如果您真的希望这些提供者的详细信息可用,您可以在 CameraException 中拥有一个属性称为 Detail或者是抽象类或 Dictionary 的东西具有实现特定细节的键值对。这样,如果有人真的想从提供者那里深入了解实际的错误代码、枚举等。

您的目标应该是让普通用户能够捕获逻辑异常并适本地处理它们,而无需需要了解具体情况。

希望能澄清一点...

关于c# - 自定义异常类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7448756/

相关文章:

c# - 存储过程 Postgresql 和 C# WPF

c# - 如何使用 SQL 查询 DataGridView?

.net - 加载程序集后如何向 .net 提供 pdb 数据?

c# - HttpWebRequest.GetResponse 中的 System.AccessViolationException

java - main 中抛出异常,没有任何错误

c# - Blazor WebAssembly 应用程序 - Markdig - 无法在 Markdown 中呈现管道表或网格表

等效于 VBA 指数形式的 C# 数据类型

c# - HRESULT 异常 : 0x8002000B (DISP_E_BADINDEX) for System. Runtime.InteropServices.COMException

c# - 接收 HTTP 响应时发生错误

c# - 读取命令行开关