我有一个函数可以测试给定的值是否正确。在此函数中,将处理不同的情况,其中两种情况始终返回True或False,第三个情况仅在Value值不正确时才执行Return。如果在这种情况下,“值”确定,则“选择”后面有一个“返回真”。
问题是,执行完该Case块后,调试器不会转到End Select,而是返回该Case块中的Return语句。
只需将最后一个“ Return True”放入所说的Case-Block,就可以避免这种情况。我只是想知道为什么会这样,因为我在MSDN页面中找不到任何此类异常。
Private Function IsValueOK(ByVal Value As String, ByVal Type As Integer) As Boolean
Select Case Type
Case 1 : Return (Value = "True")
Case 3 : Return Value.Contains("|*|True")
Case 2
Dim NominalValue As Double? = ... '10
Dim UpperTolerance As Double? = ... '0.1
Dim lowerTolerance As Double? = ... '-0.1
Dim Digits As Integer = ... '2
If NominalValue.HasValue AndAlso IsNumeric(Value) Then
Dim Part As Double = Math.Round(CDbl(Value), Digits)
If UpperTolerance.HasValue AndAlso Part > Math.Round(NominalValue + UpperTolerance, Digits) Then Return False
If lowerTolerance.HasValue AndAlso Part < Math.Round(NominalValue + lowerTolerance, Digits) Then Return False
Else
Return False
End If
End Select
Return True
End Function
值是“ 9.9”,类型是2。
在这种情况下,第一个if语句为true,因此调试器进入If-Block,第二个和第三个If-Statement为False,因此不执行Return-Statement,调试器正确地跳至“ End If ”行。但是在那之后,我希望它能跳到End Select。而是在上面的行中跳转到“返回假”。
编辑: 在使用不同版本(甚至是干净发行版本)进行进一步测试之后,这种情况几乎是随机发生的。我给人的印象是,编译器存在一些不稳定状态,Projects上下文以某种方式利用了该不稳定状态。我不会将肯定返回结果的案例和可能返回结果的案例混合在一起。
修改2: 同时,我意识到我的发行版构建测试无法表示-这意味着我仅在调试时才发现上述行为。这使编译器摆脱了我关于不稳定^^“
的过早指责顺便说一句:我正在使用Visual Studio 2017