VB.Net在选择案例中跳转到错误的退货声明

时间:2019-05-08 13:24:47

标签: vb.net

我有一个函数可以测试给定的值是否正确。在此函数中,将处理不同的情况,其中两种情况始终返回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

0 个答案:

没有答案