2017-05-27 70 views
-4

我想将一些c#代码移植到没有finally构造的语言中。 我可以用什么替代方法来模仿它? 如果你知道它是如何实现的,也许我可以创建...'最后'是如何在C#或Java中实现的?

+0

1.运行最终代码之前,任何后扔返回。 2.如果发生异常,将其吞下,最后运行代码,然后重新抛出并运行带有该异常的catch-chain。 – kobi7

+0

我可以通过在try-finally子句中运行dispose来实现使用语句。 – kobi7

+0

更好地将代码放在每个catch块之后,但在返回之前。 – kobi7

回答

1

我想没有人会告诉你finally是如何实现的,因为那些想告诉你的人不知道它和那些少数谁知道它不会告诉你。因此,让我们减少问题“我怎么能编程类似于终于东西?”

要回答这个问题,让我们来看看finally是如何工作的:

的finally块总是执行try块退出时。即使发生意外的 异常,此 可确保执行finally块。但最后对于处理不仅仅是例外 有用 - 它允许程序员避免意外地被返回,继续或中断绕过清理代码 。将finally代码清理 总是一个很好的做法,即使在没有预期的情况下也是如此。

Source。由于finally应该执行而不管结果如何,您需要将它放在try-catch之后。然而,仍然存在一个问题:当有一个不应该被捕获的异常时会发生什么?该解决方案如下:

  • 之前你try声明一个Exception变量 - catch并将其初始化null
  • 不要重新抛出里面你try例外 - catch
  • 有一个catch (Exception ex)为好,以确保每个异常都抓住了(不用担心,我们会throw需要抛出什么)
  • try-catch块把你需要的东西放到最后
  • 如果有进一步抛出的异常,然后将它们存储到变量上面
  • 解释的。如果该变量不是null,在“最后”代码