自定义异常类何时最有价值?
是否应该或不应该使用它们?有什么好处?
相关问题:
答案 0 :(得分:10)
throw
事物吗?catch()
子句)。答案 1 :(得分:1)
我有点极简主义,如果有调用代码必须明确地对发生的特定条件做出反应,那么它只会创建一个自定义异常。对于所有其他情况,我将使用最合适的.NET库异常。例如。 ArgumentNullException,InvalidOperationException
答案 2 :(得分:1)
当你需要以某种方式区分一个例外时。就是这样,真的。当然,您也可以创建一个异常类,它使用枚举来区分其原因。
当您想要传递额外信息时,这很容易看到。传递该信息的唯一原因是,如果您希望以后能够获取该信息,那么您将需要知道该类型,以便您可以从该类型而不是其他类型中检索信息。
在C ++中,也许还有其他一些语言,你也可以输入一个例外。这将允许类型区分,并可能在将来转换为自定义类。
答案 3 :(得分:1)
正如Wheelie所说,首先查看适当的框架异常,并且只使用异常(尤其是自定义异常),您真正计划捕获它们。
我使用包含UserMessage属性的自定义异常类,以便我可以在可能的情况下以简单语言将问题传播给用户。
如果您使用的是.NET,请查看Designing Custom Exceptions。有趣的是,文档对ApplicationException的使用有changed its recommendation:
如果您正在设计应用程序 需要创建自己的 例外情况,建议您派生 异常中的自定义异常 类。原本以为是这样的 自定义异常应来自 ApplicationException类; 但实际上并没有这样做 发现增加了重要的价值。对于 更多信息,请参阅最佳实践 处理例外。
答案 4 :(得分:1)
我前段时间写了一篇关于when to throw different types of exceptions, and when to create new exception types的博客文章。这不是很长,但可能太长了,不能粘贴在这里,所以请原谅我只是链接。它应该包含您关于为什么存在不同异常类型的问题,以及如何知道是否需要创建自定义异常类型。
答案 5 :(得分:1)
我使用自定义异常的主要原因是使用多个提供程序进行封装:从SqlDataAccess层泄漏SqlException,并且NetworkDataAccess层中的SocketException使得调用代码依赖于您的详细信息 实现。最好将它们包装成DataAccessException或其他东西。
答案 6 :(得分:0)
我认为简单的答案是“当没有现有的异常表达特殊情况时,创建一个自定义异常。”
我还应用了第二条规则:“如果您希望开发人员能够处理异常,则只创建自定义异常。”如果您不将异常视为可恢复条件,则无法创建新异常。在该上下文中抛出InvalidOperationException更有效。
编辑:结束撰写关于此主题的博客文章:http://blogs.msdn.com/jaredpar/archive/2008/10/20/custom-exceptions-when-should-you-create-them.aspx