VBのAnd/Orは、Cの&&/||と違う
うすうすそんな予感はしてたのですが、
Cの&&は前の条件が偽の場合、||は前の条件が真の場合、後ろの条件は評価されないのですが、
VBのAnd/Orはそういう動作ではなく、前の条件の真偽に関わらず、後ろの条件も評価されるという挙動のようです。
で、VB.NETでは、AndAlso/OrElseとかいう、また微妙な名前の演算子が導入されています。
Imports System Public Class Test Public Shared Dim a As Integer = 0, b As Integer = 0 Public Shared Sub Main If c() And d() Then Console.WriteLine("abc") End If Console.WriteLine(a) Console.WriteLine(b) End Sub Public Shared Function c As Boolean a = a + 1 c = False End Function Public Shared Function d As Boolean b = b + 1 d = True End Function End Class
1,0が表示されるかと思いきや、1,1が表示されるワナ。
Cっぽくするには、AndAlsoを使います。