首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >异常处理

异常处理
EN

Stack Overflow用户
提问于 2014-06-14 14:51:06
回答 2查看 136关注 0票数 1

当处理异常时,例如在我的表示逻辑中的一个方法中,如果这里的唯一目的是警告用户,那么在一个catch块中捕获所有可能的异常是可以的吗?

代码语言:javascript
复制
void Do()
{
    try
    {
        // ...
    }    
    catch (Exception e)
    {
        MessageBox.Show(e.message);
    }
}

或者,我们是否应该总是在单独的catch块中捕获所有可能的异常(如OutOfMemoryExceptionNullReferenceException等,后面跟着更通用的异常)?

由于e.message中的信息与普通用户无关,我们可以这样做:

代码语言:javascript
复制
MessageBox.Show("Exception occurred and contact system administrator");

这是标准的方式吗?那么管理员如何跟踪错误(因为堆栈跟踪没有显示)?

注意:我的唯一目的是提醒用户并尝试保持系统正常运行(而不会崩溃)。

EN

回答 2

Stack Overflow用户

发布于 2014-06-14 15:14:36

这是一种非常糟糕的做法。如果您需要捕获异常,则捕获特定的异常,然后对其做出反应。基本上,您只捕获可以处理的异常,而不是所有可能发生的异常。好的代码设计也有助于防止抛出异常。例如,您可以使用空对象模式来省略或显著降低抛出NullReferenceException的风险。Try/Do模式在避免NullReference异常方面也做得很好。

请阅读MSDN - Exception Handling.

显示给用户的错误消息也应该更具体,并提供一些细节,但不要太技术性(例如,您将显示“磁盘空间不足。请释放...”,而不是“发生MemoryWriteException”)。在代码中处理的异常不需要传播给用户。这破坏了应用程序流程和整体体验,因为用户对此无能为力。考虑使用开发人员可以访问的记录器。

请参阅MSDN - Error Message Guidlines.

票数 9
EN

Stack Overflow用户

发布于 2014-06-14 15:27:44

  1. 管理资源(文件、连接、第三方组件等)当违反业务规则时,
  2. 会抛出您自己的异常(为您认为可能抛出其他类型的异常(线程、异步、服务调用等)的call创建您自己的异常类)。

一般来说,代码越复杂,需要使用的try catch和exception类型就越多。无论如何,Exception不是UI工具,而是开发资源。

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24217407

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档