Vb.net AND/AndAlso带有Or/OrElse混淆

Vb.net AND/AndAlso带有Or/OrElse混淆,vb.net,Vb.net,我需要确保第一个项目有一个条目。(这是CSV文件的导入)。 如果项(471)).ToString为空,但项(475)).ToString)或项(479)).ToString)中的值大于0,则需要执行预期操作 我已经尝试了一些方法,但无法实现。如果我取出OrElse语句,只使用其中一个,它就会起作用。我搞不懂如何使用正确的语法。有人能给我指一下正确的方向吗 If (MyList.Items.Item(471)).ToString = "" And CDec((MyList.Items.It

我需要确保第一个项目有一个条目。(这是CSV文件的导入)。 如果项(471)).ToString为空,但项(475)).ToString)或项(479)).ToString)中的值大于0,则需要执行预期操作

我已经尝试了一些方法,但无法实现。如果我取出OrElse语句,只使用其中一个,它就会起作用。我搞不懂如何使用正确的语法。有人能给我指一下正确的方向吗

    If (MyList.Items.Item(471)).ToString = "" And CDec((MyList.Items.Item(475)).ToString) > 0D OrElse CDec((MyList.Items.Item(479)).ToString) > 0D Then
        MessageBox.Show("FUELING DATE #1 CANNOT BE BLANK", "Critical Warning", MessageBoxButtons.OK, MessageBoxIcon.Exclamation)
    Else
        tbDate1.Text = (MyList.Items.Item(471)).ToString
    End If
总之

If condition1 AndAlso (condition2 OrElse condition3) Then

什么是混淆,
和also/OrElse
短路<代码>如果1=0和1=1将计算这两个条件,即使它知道第一个条件不是真的。如果函数位于if行中,则可能导致意外结果
IF 1=0和Also 1=1“检查1=0,计算结果为false,并丢弃IF分支。类似地,
,它计算所有条件,即使第一次成功。
OrElse
仅在仍需要找到匹配项时继续前进。如果ToyInBox(“卡车”)或Else ToyInPocket(“卡车”),您可以执行
操作
ToyInPocket()
仅在
ToyInBox()时被选中
是错误的如果你感到困惑,那是因为你在数学课上没有很好地听清楚运算符的优先级。在布尔逻辑中,
优先于
所以如果你想在
运算符之前计算
运算符,就必须使用括号。这是完全相同的在一个基本的算术表达式中,我们使用括号来表示在乘法之前要求值的加法。至于使用
/
之间的选择,以及
/
之间的选择,这与这个问题无关。在这种特殊情况下,两者都可以工作,但您应该始终按照以下方法工作规则:始终使用
/
OrElse
,除非你特别不想短路,如果你不想短路,那么你可能应该重新考虑你的设计以避免短路。我的总体错误是我忘记了我的OrElse语句周围需要括号。谢谢你的帮助。
If condition1 AndAlso (condition2 OrElse condition3) Then