我们所有人都使用try catch块。但是在自定义函数中处理错误的最佳方式是什么?在自定义函数内处理异常
当引发异常时(如果可能的话在函数中)显示一个消息框给用户,或者返回一个值表示在函数中发现了一个错误?
我们所有人都使用try catch块。但是在自定义函数中处理错误的最佳方式是什么?在自定义函数内处理异常
当引发异常时(如果可能的话在函数中)显示一个消息框给用户,或者返回一个值表示在函数中发现了一个错误?
它确实取决于函数,但总的来说,我会建议不要让它显示一个MessageBox给用户;这是用户界面的一项任务。如果函数(出于任何正当理由)确实显示一个MessageBox,则提供一个保证为“无声”的重载,以便该函数的调用者可以阻止该MessageBox。但是,正如我所说的,我认为最好让调用者决定如何处理异常。毕竟,这可能是从没有UI的Windows服务调用函数。
我通常使用这些方法之一:
这适用于函数本身无法处理异常的情况。在某些情况下,函数可能会处理异常状态并继续执行其工作。在这些情况下,函数当然不会抛出异常。
我让我所有的错误冒泡到顶层,我使用应用程序错误处理程序来处理它们。
如果我有一个特定的错误,我知道可以发生在一个函数中,并且该函数可以处理它,那么我就可以。
超时,对象引用没有设置等等到最高处理程序。
不要捕捉你无法做的事情。充斥着try/catch块的代码很难阅读,这意味着您的异常处理代码不包含在一个地方以方便维护。
如果你是刚刚登录异常或提醒用户,这应该在堆栈的顶部来完成(或者在您的应用层边界)。使用Application.ThreadException事件和AppDomain.CurrentDomain.UnhandledException事件并将它们挂接到Sub Main方法中的事件处理程序。
如果您想让它冒泡,请使用Andy建议的应用程序级异常处理程序。这样,您可以记录异常情况,如果需要显示消息框以及可能需要执行的任何其他操作。 – 2009-06-04 19:26:50
@Sam:非常好的建议 – 2009-06-04 19:28:17