我应该处理哪些例外情况?

时间:2011-04-06 09:39:52

标签: exception exception-handling

我正在设计一个WinForms应用程序。

目前,我在UI级别记录了所有异常。

但是,对于他们中的任何一个,除了记录之外,我还能做什么吗?这表明设计不好吗?

此外,在一种方法中(.NET的方法在Windows服务上执行命令),它可以抛出Win32Exception和InvalidOperationException类型的异常。

有一个像FileNotFound这样的例外,我可以提示用户提供另一个文件(尽管.NET内置了检查文件存在的方法),但是除了上面的例外,它们归结为低级问题与机器,所以这些只能真正记录。

这是决定捕获哪些例外的正确方法吗?另外,我应该捕获还是抛出ArgumentNullException?它表示代码有问题,对吗?

1 个答案:

答案 0 :(得分:4)

(我会在整个答案中使用Eric Lipperttaxonomy of exceptions。)

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

无论如何,你应该处理

FileNotFoundException和其他外生异常。即使您可以事先检查文件是否存在,也没有什么能阻止它在检查和使用之间无法访问。这些例外取决于您无法控制的外部条件,因此您应该准备好处理它们。

您永远不应该抓住ArgumentNullException或任何其他愚蠢的例外如果在执行此操作时会受到伤害,请不要这样做。如果您不应该传递空参数,则不要传递它。修复代码,使其事先处理空引用。