2011-04-06 56 views
2

我正在设计一个WinForms应用程序。我应该处理哪些异常?

目前,我所有的异常都是在UI级别记录的。

但是,对于他们中的任何一个,除了日志以外,我还要做其他事情吗?这是否表明设计不好?另外,在一种方法中(.NET的方法在windows服务上执行命令),它可以抛出Win32Exception和InvalidOperationException类型的异常。

像FileNotFound这样的异常,我可以提示用户提供另一个文件(虽然.NET有内置的方法来检查文件是否存在),但是像上面这样的例外情况,它们已经降到了低级别机器出现问题,所以这些只能记录下来。

这是决定捕捉哪些异常的正确方法吗?另外,我应该抓住还是抛出ArgumentNullException?它表明代码存在问题,对吧?

+0

您提到的Win32和InvalidOperation异常的原因是什么?根据他们可能被认为是骨头,外源性,令人烦恼或致命的。 – 2011-04-08 16:39:38

回答

4

(我将使用Eric Lipperttaxonomy of exceptions整个答案。)

如果有什么可以做这件事,那么只需登录并解救当前的操作,屏幕或整个应用程序,这取决于关于错误的严重性。只是不要尝试着面对致命异常。在一些极端的情况下(如AccessViolationException),只是记录甚至让你的finally块运行可能不是一个好主意,因为如果你在损坏的进程中运行代码,你不知道会发生什么。

FileNotFoundException和其他外生的例外你应该处理反正。即使您可以预先检查文件是否存在,但没有任何东西阻止它在检查与使用之间无法访问。这些例外取决于你无法控制的外部条件,所以你应该准备好处理它们。

您不应该捕获ArgumentNullException或任何其他骨头异常如果你这样做会伤害你,不要这样做。如果你不应该传递一个空参数,那么不要传递它。修复代码,以便事先处理空引用。