当处理异常时,例如在我的表示逻辑中的一个方法中,如果这里的唯一目的是警告用户,那么在一个catch块中捕获所有可能的异常是可以的吗?
void Do()
{
try
{
// ...
}
catch (Exception e)
{
MessageBox.Show(e.message);
}
}或者,我们是否应该总是在单独的catch块中捕获所有可能的异常(如OutOfMemoryException、NullReferenceException等,后面跟着更通用的异常)?
由于e.message中的信息与普通用户无关,我们可以这样做:
MessageBox.Show("Exception occurred and contact system administrator");这是标准的方式吗?那么管理员如何跟踪错误(因为堆栈跟踪没有显示)?
注意:我的唯一目的是提醒用户并尝试保持系统正常运行(而不会崩溃)。
发布于 2014-06-14 15:14:36
这是一种非常糟糕的做法。如果您需要捕获异常,则捕获特定的异常,然后对其做出反应。基本上,您只捕获可以处理的异常,而不是所有可能发生的异常。好的代码设计也有助于防止抛出异常。例如,您可以使用空对象模式来省略或显著降低抛出NullReferenceException的风险。Try/Do模式在避免NullReference异常方面也做得很好。
请阅读MSDN - Exception Handling.
显示给用户的错误消息也应该更具体,并提供一些细节,但不要太技术性(例如,您将显示“磁盘空间不足。请释放...”,而不是“发生MemoryWriteException”)。在代码中处理的异常不需要传播给用户。这破坏了应用程序流程和整体体验,因为用户对此无能为力。考虑使用开发人员可以访问的记录器。
请参阅MSDN - Error Message Guidlines.
发布于 2014-06-14 15:27:44
一般来说,代码越复杂,需要使用的try catch和exception类型就越多。无论如何,Exception不是UI工具,而是开发资源。
https://stackoverflow.com/questions/24217407
复制相似问题