关于错误的现代方法goto [catch-all]标签'在C#中

时间:2017-02-16 11:00:04

标签: c# error-handling vb6-migration

从我的研究中,这个问题在dot net的早期就被问了很多,但恕我直言,很多回复都有些讽刺,这就是我们现在这样做的方式'样式。让我们看看网络是否已经长大了一点。

1992年大约的例子:

Sub Main()
On Error GoTo ErrHand
....Code Here
End Sub

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

Clunky就是这样,错误转到[catch-all]标签'可用于VB6的方法有一个用途,即捕获意外异常并报告它们。它可以报告错误编号和描述,包含异常的模块,行号和字符位置。当然,勤奋的开发人员会为预期的异常和业务逻辑异常编写代码。错误的事情是没有水晶球的非常有用的答案。

我的C#好友告诉我使用try-catch,但与此同时他们说民间传说说不要在每种方法中加入大量尝试,因为这是不好的做法。

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

那么 - 关于VB6的C#等价的2016年答案是什么?错误goto [catch-all]标签'构造,为什么我不能用标准化的try-catch包装每个模块的内容来实现相同的意外异常处理?

1 个答案:

答案 0 :(得分:2)

当你不知道错误的性质时,你明智地做了什么?关于唯一明智的做法是尝试记录错误然后关闭 - 你无法推断程序的状态,你只知道它不是你想象的那样。

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

这样,您只需编写一次代码 - 而不是每次函数。 (除非您正在编写小型“玩具”应用程序,否则现在编写单线程应用程序的情况极为罕见,并且On Error Goto模式必须至少对每个充当条目的函数重复指向新主题)

在其他任何地方,如果您正在撰写try / catch,那应该是因为您有特定的策略来处理和恢复来自错误情况。