【问题标题】:Is there any diffrence between Continue and GoTo Start in this code?此代码中的 Continue 和 GoTo Start 之间有什么区别吗?
【发布时间】:2012-09-27 13:56:12
【问题描述】:
    While True
Start:
        Continue While
        GoTo(Start)
    End While

注意:我知道 GoTo 在此示例中永远无法到达。我只是想知道使用 GoTo (X) 和 (Exit / Continue) 语句之间是否有任何计算差异?我倾向于使用 GoTo 语句,即使 Continue 或 Exit 就足够了。这是不好的风格吗?我不经常在其他程序员的代码中看到 GoTo。

编辑:正如人们亲切地指出的那样,GoTo 不会在条件 while 循环上评估条件。这导致我问以下两段代码是否会编译成完全相同的 CLR 代码:

Dim x as Integer = 0
While x < 5
    Continue
End While

    Dim x As Integer = 0
JumpPoint:
    If x < 5 Then
        GoTo JumpPoint
    End If

【问题讨论】:

  • “计算”是什么意思?
  • GoTo 通常被认为是不好的做法,因为它很容易导致代码难以遵循。
  • 奇怪?这就是我喜欢 GoTo 的原因,因为我认为它更容易理解。至少如果你使用好的 LabelNames。
  • 您为什么不使用该代码制作一个测试程序集并在其上运行 MSIL 反汇编程序以便您自己查看?这很容易做到,对于这样一个简单的示例,按照 MSIL 代码应该很容易。
  • 因为我不知道有这样的东西存在!感谢您指出这一点,我现在就去看看。

标签: .net vb.net syntax coding-style continue


【解决方案1】:

有一点不同:对于Continue,while 循环的条件被重新计算,GoTo simple 从 Start 标签继续执行而不查看 while 条件。

Start:

    GoTo(Start)

一样
While True
    Continue While
End While

就“发生了什么”而言。但是一旦引入条件,GoTo 就不会这样做了。


对于您更新的问题:是的,还是有一个区别。第一条语句包括Continue,它(基本上)与GoTo 相同。但是,您的示例中未包含的情况是由于在两者之间发生的任何操作而未调用 ContinueGoTo 的情况。如果 Continue 被跳过,End While 将循环到下一个 While 评估并运行。

【讨论】:

  • @vanattab:dont' 用另一个问题编辑您的问题。改为发布第二个问题。
【解决方案2】:

如果在循环条件下进行任何求值,就会有所不同,例如:

While var < 5

通过使用goto(start)var 的值不再被计算。

关于编码风格,没有人会阻止你使用goto,但continueexit 已经跳转到定义明确的代码点,在许多情况下降低了goto 的实用性。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-09-13
    • 2017-04-05
    • 2014-09-18
    • 2015-06-14
    • 2011-05-23
    • 2011-02-15
    • 2011-11-27
    相关资源
    最近更新 更多