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