我正在设计一个WinForms应用程序。
目前,我在UI级别记录了所有异常。
但是,对于他们中的任何一个,除了记录之外,我还能做什么吗?这表明设计不好吗?
此外,在一种方法中(.NET的方法在Windows服务上执行命令),它可以抛出Win32Exception和InvalidOperationException类型的异常。
有一个像FileNotFound这样的例外,我可以提示用户提供另一个文件(尽管.NET内置了检查文件存在的方法),但是除了上面的例外,它们归结为低级问题与机器,所以这些只能真正记录。
这是决定捕获哪些例外的正确方法吗?另外,我应该捕获还是抛出ArgumentNullException?它表示代码有问题,对吗?
答案 0 :(得分:4)
(我会在整个答案中使用Eric Lippert的taxonomy of exceptions。)
如果有什么可以做,然后只需登录并解救当前的操作,屏幕或整个应用程序,这取决于错误的严重性。只是不要试图面对致命异常。在某些极端情况下(如一个AccessViolationException
),只是记录,甚至让你的finally块运行的可能不是一个好主意,因为你不知道你是否运行在一个腐败进程的代码会发生什么。
FileNotFoundException
和其他外生异常。即使您可以事先检查文件是否存在,也没有什么能阻止它在检查和使用之间无法访问。这些例外取决于您无法控制的外部条件,因此您应该准备好处理它们。
您永远不应该抓住ArgumentNullException
或任何其他愚蠢的例外。 如果在执行此操作时会受到伤害,请不要这样做。如果您不应该传递空参数,则不要传递它。修复代码,使其事先处理空引用。