c# - C# 中 'on error goto [catch-all] label' 的现代方法

标签 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

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

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

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

那么 - VB6 'on error goto [catch-all] label' 构造的 C# equiv 的 2016 年答案是什么,为什么我不能有一个标准化的 try-catch 包装每个模块的内容以产生同样的意外异常处理?

最佳答案

当您不知道错误的性质时,您可以明智地做什么?几乎唯一明智的做法是尝试记录错误然后关闭 - 您无法推断程序的状态,您所知道的只是它不是您认为的那样。

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

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

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

关于c# - C# 中 'on error goto [catch-all] label' 的现代方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42271995/

相关文章:

vb.net - 如何将格式函数从 VB 更新到 VB.NET

c# - UWP 列表框 ForEach

c# - 如何以编程方式找出 JRE 网络设置?

debugging - CakePHP 浏览器仅发出文件名

angular - rxjs处理错误与拦截器不兼容

.net - 从 VB6 迁移到 .NET/.NET Core 的最佳策略或工具

c# - 即使捕获到异常,Polly 也不会重试

c# - Scala Option 是否与 C# Nullable 类型相同?

php - 运行时通知 : Declaration of in symfony2

.net - VB6项目可以使用.Net .dll吗