包装例外

时间:2010-01-10 02:36:10

标签: exception-handling exception

我经常想要在异常消息中添加有用的信息。由于Exception类的Message属性没有公共setter,因此一个选项是将引发的异常包装在另一个中。

//...
catch(Exception e)
{
 throw new Exception("Some useful information.", e);
}

这是不好的做法,如果有,那么替代方案是什么?

5 个答案:

答案 0 :(得分:3)

最好使用指向原始异常的指针创建一个新的异常。您可以打印出旧信息中的新信息和信息。

在InnerException上查看此信息

http://msdn.microsoft.com/en-us/library/system.exception.innerexception.aspx

这是标准方法,这就是为什么Microsoft在其Exception类中内置了对此的支持。

答案 1 :(得分:3)

这样做没有错,但如果您有更多信息,我不会使用常规Exception类。调试问题越容易,您的异常就越具体。

答案 2 :(得分:1)

看起来Exception.Data属性就是我追求的目标。

答案 3 :(得分:0)

原始Exception已有该信息。除非您创建新的Exception,否则您需要在此处添加更多内容。 SpecificException这将带来一些意义。

答案 4 :(得分:0)

唯一需要注意的是,您没有为可能处理异常的代码提供任何新信息;在调试问题时,您只为开发人员提供了一些有用的东西。这可能是你所追求的全部,但似乎有点短视。

我不想抛出完全相同类型的异常,特别是像Exception一样的异常,因为我可能能够处理ConnectionTimeoutException但无法处理PlanetExplodedException。我不知道如何处理一般的异常,而不是记录它。