首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >C#中“on error goto [catch-all] label”的现代方法

C#中“on error goto [catch-all] label”的现代方法
EN

Stack Overflow用户
提问于 2017-02-16 19:00:04
回答 1查看 277关注 0票数 0

根据我的研究,这个问题在.net的早期被问了很多,但我的很多回答都有点尖酸刻薄,“这就是我们现在做的方式”。让我们看看网络是不是成熟了一点。

示例大约1992年:

代码语言:javascript
复制
Sub Main()
On Error GoTo ErrHand
....Code Here
End Sub

ErrHand:
  ' raise error nicely here inc error no, desc, line & character pos
End Sub

虽然笨拙,但VB6可用的“on error goto catch-all label”方法有一个用途,那就是捕获意外的异常并报告它们。它可以报告错误号和描述,以及异常的模块、行号和字符位置。当然,勤奋的开发人员会为预期的异常和业务逻辑异常编写代码。出错的事情是对没有水晶球的一个非常有用的答案。

我的C#伙伴告诉我使用try-catch,但同时他们说民间传说告诉我不要在每个方法中都放入大量的try-catch,因为这是不好的做法。

但是,当我询问这个民间传说的确切来源时,却没有答案。

那么,对于VB6 'on error goto catch-all label‘构造的C#等价物,2016年的答案是什么?为什么我不能有一个标准化的try-catch包装每个模块的内容,以实现相同的意外异常处理?

EN

回答 1

Stack Overflow用户

发布于 2017-02-16 19:11:03

当您不知道错误的性质时,您可以明智地做些什么?唯一明智的做法是尝试记录错误,然后关闭-你不能对程序的状态进行推理,你只知道它不是你想象的那样。

因此,处理这种情况的最佳位置是在AppDomain.UnhandledException或类似的地方(请注意,文档讨论了可能适用于某些特定应用程序模型的其他方法)。

这样,您只需编写一次代码-而不是每个函数一次。(除非您正在编写小型的“玩具”应用程序,否则如今编写单线程应用程序的情况已经不多见,而且至少必须为每个充当新线程入口点的函数重复On Error Goto模式)。

在其他地方,如果您正在编写try/catch,这应该是因为您有一个处理和恢复错误情况的特定策略。

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

https://stackoverflow.com/questions/42271995

复制
相关文章

相似问题

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