创建自定义异常还是使用内置异常?

krs*_*rs1 11 .net c# class-design exception-handling

目前,我正在编写一个客户端类,在其他喜欢抛出异常的类中使用DNS,套接字和SSL.其他人将实现这个类,所以我想知道抛出异常的最佳做法是什么.

我应该创建自己的自定义异常,以便他们知道我的类抛出异常,还是应该允许我调用的类和方法(DNS,套接字等)抛出自己的异常?目前,代码有数百行,并且随着许多不同的方法调用而增长.在这种情况下抛出异常的最佳做法是什么?

Ode*_*ded 20

如果BCL包含已传达您想要的含义的类(ArgumentNullException例如),请使用它们.

使用您自己的异常类保留特定于API的内容.

如果您认为可以添加信息,请务必提出自己的异常但不要吞下异常 - 将它们作为您自己的内部异常传播.


Jay*_*Jay 6

如果添加信息,可以抛出自己的异常,但除非存在安全问题,否则不要从底层服务中吞下异常.

如果要捕获一个异常并抛出一个新异常,请将旧异常分配给新异常的InnerException属性.您可以通过这种方式嵌套尽可能多的异常,从而创建异常传播方式的分层"视图",这对调试非常有用.