2

我们所有人都使用 try catch 块。但是在自定义函数中处理错误的最佳方法是什么?

抛出异常时向用户显示一个消息框(如果可能在函数内),或者返回一个值指示在函数内发现错误?

4

3 回答 3

2

这实际上取决于功能,但总的来说,我建议不要让它向用户显示 MessageBox;这是 UI 的任务。如果函数(出于任何正当理由)确实显示了 MessageBox,请提供保证“静默”的重载,以便函数的调用者可以阻止 MessageBox。但是,正如我所说,我认为最好让调用者决定如何处理异常。毕竟,该函数可能是从没有 UI 的 Windows 服务调用的。

我通常使用以下方法之一:

  • 根本没有捕捉到异常,而是让它向上冒泡。这是通过简单地不在函数中实现 try-catch 块来完成的。
  • 捕获异常,对其进行处理(例如记录它),然后重新抛出它。
  • 捕获异常,将其(作为 InnerException)包装在抛出的新异常中,可能会完成一些日志记录。

这适用于函数本身无法处理异常的情况。在某些情况下,该函数可能会处理异常状态并仍然执行其工作。在这些情况下,函数当然不会抛出异常。

于 2009-06-02T10:23:09.830 回答
0

我让我所有的错误冒泡到顶层,在那里我使用应用程序错误处理程序来处理它们。

如果我知道某个特定错误可能发生在 aa 函数中并且该函数可以处理它,那么我会这样做。

超时、未设置的对象引用等会上升到顶级处理程序。

于 2009-06-02T09:50:36.917 回答
0

不要捕获您无法处理的异常。到处都是 try/catch 块的代码很难阅读,这意味着您的异常处理代码没有包含在一个地方以便于维护。

如果您只是记录异常或提醒用户,这应该在堆栈顶部(或在您的应用程序层边界)完成。使用 Application.ThreadException 事件和 AppDomain.CurrentDomain.UnhandledException 事件并将它们连接到您的 Sub Main 方法中的事件处理程序。

于 2009-06-02T10:57:58.557 回答