case语句为真,但不执行真case条件下的代码[重复]

Posted

技术标签:

【中文标题】case语句为真,但不执行真case条件下的代码[重复]【英文标题】:case statement is true but the code under the true case condition is not executed [duplicate] 【发布时间】:2017-07-30 17:03:38 【问题描述】:

我有一个应用程序,其中有组合框。在这些组合框中,我希望自动填充单位。我已经建立了一个有select..case 条件的代码。 case 语句为真,但不执行真 case 语句后面的代码。我已经通过断点分析了,也显示了True但是没有执行,跳转到最后。请指教。

Private Sub Load_units_combo_boxes()

    Dim ComboBoxes As New ArrayList

    For Each ComboBox In Me.Controls
        If ComboBox.Name.Contains("Units") And TypeOf ComboBox Is ComboBox Then
            ComboBoxes.Add(ComboBox)
        End If
    Next

    For Each ComboBox In ComboBoxes
        Select Case ComboBox.name.ToString
            Case ComboBox.name.ToString.Contains("Pressure")
                For Each unit In _units
                    If unit.contains("Pressure") Then
                        unit.replace("Pressure", "")
                        ComboBox.items.add(unit)
                    End If
                Next

            Case ComboBox.name.ToString.Contains("Distance")
                For Each unit In _units
                    If unit.contains("Distance") Then
                        unit.replace("Distance", "")
                        ComboBox.items.add(unit)
                    End If
                Next
        End Select
    Next

End Sub

Public _units As New ArrayList

Private Sub units_collection()

    Dim units As New Units_and_conversions
    Dim properties = units.GetType().GetProperties()

    For Each prop In properties
        _units.Add(prop.Name)
    Next


End Sub

Public Class Units_and_conversions

Private universal_distance_unit As Double = 1
Private universal_pressure_unite As Double = 1


Public Property Distance_Meter() As Double
    Get
        Return universal_distance_unit
    End Get
    Set(value As Double)
        value = universal_distance_unit
    End Set
End Property

Public Property Distance_MilliMeter() As Double

    Get
        Return 0.001 * universal_distance_unit
    End Get
    Set(value As Double)
        value = 0.001 * universal_distance_unit

    End Set
End Property

结束类

【问题讨论】:

即使在Option Strict 下也无法编译。测试,ComboBox.name.ToString.Contains("Pressure") 将导致 True 或 False。该代码试图将其与控件名称进行比较。无需在字符串属性上使用ToString() Select case true 是你的意思。 如果我不使用 ToString 它会出错并且不编译。 如果您编辑了您的问题以包含 _units 是什么(或其中的一个有用的小样本),那么我们很可能能够为您提供一些建议。 您将Case 语句与If 语句混淆了。 If 语句检查 TrueCase 语句检查与对应的 Select 是否相等。 【参考方案1】:

此代码失败。

 Private Sub Button1_Click(sender As Object, e As EventArgs) Handles 
 Button1.Click

    Dim s As String = "abcdefghijklmnopqrstuvwxyz"

    Select Case s
        Case s.Contains("g")
            MsgBox("Case Select Fails")
    End Select

    If s.Contains("g") Then
        MsgBox("If statement works")
    End If

End Sub

“案例选择”未设置为布尔问题,因此失败。以下代码将起作用。

此代码有效

 Private Sub Button1_Click(sender As Object, e As EventArgs) Handles 
  Button1.Click

    Dim s As String = "abcdefghijklmnopqrstuvwxyz"

    Select Case True
        Case s.Contains("g")
            MsgBox("Case Select Works")
    End Select

    If s.Contains("g") Then
        MsgBox("If statement works")
    End If
End Sub

此代码有效,因为问题被正确设置为布尔问题而不是字符串比较。

【讨论】:

非常感谢。案例真实的方法已经奏效了。

以上是关于case语句为真,但不执行真case条件下的代码[重复]的主要内容,如果未能解决你的问题,请参考以下文章

java的结构和方法

repeat语句(pascal)

九while 条件循环语句case 条件测试语句计划任务服务程序

Shell脚本------条件语句(条件测试,if语句,case语句)

条件测试以及if,case语句

条件测试以及if,case语句