.net 在这段代码中,Continue和GoTo Start之间有什么区别吗?

.net 在这段代码中,Continue和GoTo Start之间有什么区别吗?,.net,vb.net,syntax,coding-style,continue,.net,Vb.net,Syntax,Coding Style,Continue,注意:我知道在这个例子中,GoTo永远无法到达。我只是想知道使用GoTo(X)和(Exit/Continue)语句之间是否有计算上的差异?我倾向于使用GoTo语句,即使Continue或Exit已经足够了。这种款式不好吗?我不经常在其他程序员的代码中看到GoTo 编辑:正如人们善意地指出的,GoTo不会在条件while循环中计算条件。这让我想问,以下两段代码是否会编译成完全相同的CLR代码: While True Start: Continue While

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

编辑:正如人们善意地指出的,GoTo不会在条件while循环中计算条件。这让我想问,以下两段代码是否会编译成完全相同的CLR代码:

    While True
Start:
        Continue While
        GoTo(Start)
    End While
Dim x作为整数=0
而x<5
继续
结束时

Dim x作为整数=0
跳转点:
如果x<5,则
跳转点
如果结束

如果在循环条件下进行任何计算,则会有差异,例如:

    Dim x As Integer = 0
JumpPoint:
    If x < 5 Then
        GoTo JumpPoint
    End If
而var<5
通过使用
goto(start)
不会再次计算
var
的值


至于编码风格,没有人会阻止您使用
goto
,但是
continue
exit
已经跳转到定义良好的代码点,在许多情况下降低了
goto
的有用性。

如果在循环条件下进行任何计算,则会有所不同,例如:

    Dim x As Integer = 0
JumpPoint:
    If x < 5 Then
        GoTo JumpPoint
    End If
而var<5
通过使用
goto(start)
不会再次计算
var
的值


至于编码风格,没有人会阻止你使用
goto
,但是
continue
exit
已经跳转到定义良好的代码点,在许多情况下降低了
goto
的有用性。

有一点不同:对于
continue
,while循环的条件被重新评估,
GoTo
simple从开始标签继续执行,而不查看while条件

While var < 5
就跟

Start:

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



对于您更新的问题:是的,还有一个区别。第一条语句包括
Continue
,它(基本上)与
GoTo
相同。但您的示例中未包括的情况是,由于其间发生的任何操作而未调用
Continue
GoTo
。如果跳过
Continue
,则
结束While
将直接循环到下一个
While
计算并运行。

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

While var < 5
就跟

Start:

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



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

什么是“计算性”?GoTo通常被认为是不好的做法,因为它很容易导致很难遵循的代码。奇怪吗?这就是为什么我喜欢GoTo,因为我认为它更容易跟随。至少如果你使用了好的标签名,为什么不用这些代码做一个测试程序集,然后在上面运行MSIL反汇编程序,这样你就可以自己查看了?对于这样一个简单的例子,它很容易做到,并且应该很容易遵循MSIL代码。因为我不知道有这样的东西存在!谢谢你指出这一点,我现在就去看看。你说的“计算”是什么意思?GoTo通常被认为是不好的做法,因为它很容易导致代码很难理解。奇怪吗?这就是为什么我喜欢GoTo,因为我认为它更容易跟随。至少如果你使用了好的标签名,为什么不用这些代码做一个测试程序集,然后在上面运行MSIL反汇编程序,这样你就可以自己查看了?对于这样一个简单的例子,它很容易做到,并且应该很容易遵循MSIL代码。因为我不知道有这样的东西存在!谢谢你指出这一点,我现在就去看看。@Vanatab:不要用其他问题编辑你的问题。发布第二个问题。@vanattab:不要用其他问题编辑你的问题。发布第二个问题。