AndAlso 運算子 (Visual Basic)
對兩個運算式執行最少運算邏輯交集運算。
result = expression1 AndAlso expression2
組件
詞彙 |
定義 |
result |
必要項。 任何 Boolean 運算式。 結果是比較兩個運算式的 Boolean 結果。 |
expression1 |
必要項。 任何 Boolean 運算式。 |
expression2 |
必要項。 任何 Boolean 運算式。 |
備註
若已編譯的程式碼依其他運算式的結果,能略過運算式的評估,則邏輯運算式就稱為「最少運算」(Short-Circuiting)。 若所評估之第一個運算式的結果會決定運算的最終結果,則不需評估第二個運算式,因其無法改變最終結果。 若略過的是複雜或包含程序呼叫的運算式,則最少運算便可以提升效能。
若將兩個運算式評估為 True,則 result 為 True。 下表說明如何決定 result。
如果 expression1 是 |
且 expression2 是 |
result 的值為 |
True |
True |
True |
True |
False |
False |
False |
(不評估) |
False |
AndAlso 運算子的其中一個作用是先測試物件執行個體是否存在,再嘗試存取其中一個成員。 下面這行程式碼可說明這點。
If newObject AndAlso newObject.initFinished Then
若未將物件執行個體指派給 newObject 變數,則存取上述程式碼中的 initFinished 屬性時,可能會擲回 NullReferenceException 例外狀況。 不過,如果 newObject 是 Nothing,則 AndAlso 運算子可能會使得編譯器略過 initFinished 的存取,因為 Nothing 會評估為 False。
資料型別
AndAlso 運算子只針對 Boolean 資料型別 (Visual Basic) 定義。 Visual Basic 會在必要時將每個運算元轉換成 Boolean,並且完全以 Boolean 執行運算。 若將結果指派給數字型別,Visual Basic 就會將它從 Boolean 轉換成該型別。 這可能會產生未預期的行為。 例如,轉換成 Integer 時,5 AndAlso 12 會導致 –1。
多載化
And 運算子 (Visual Basic) 和 IsFalse 運算子 (Visual Basic)可以「多載」(Overload),也就是,當運算元具備類別或結構的類型時,該類別或結構就可以重新定義其行為。 多載 And 和 IsFalse 運算子會影響 AndAlso 運算子的行為。 如果您的程式碼在多載 And 和 IsFalse 之類別或結構上會使用 AndAlso,就一定要先瞭解其重新定義的行為。 如需詳細資訊,請參閱運算子程序 (Visual Basic)。
範例
下列範例會使用 AndAlso 運算子,對兩個運算式執行邏輯交集。 結果是代表整個交集的運算式是否為 true 的 Boolean 值。 如果第一個運算式為 False,則不評估第二個運算式。
Dim a As Integer = 10
Dim b As Integer = 8
Dim c As Integer = 6
Dim firstCheck, secondCheck, thirdCheck As Boolean
firstCheck = a > b AndAlso b > c
secondCheck = b > a AndAlso b > c
thirdCheck = a > b AndAlso c > b
前一個範例分別產生 True、False 和 False 的結果。 計算 secondCheck 時,不會評估第二個運算式,因為第一個運算式已經是 False。 然而,計算 thirdCheck 時會評估第二個運算式。
下列範例會顯示 Function 程序,在陣列元素之間搜尋指定值。 如果陣列是空的,或陣列長度已超過,While 陳述式就不能根據搜尋值測試陣列元素。
Public Function findValue(ByVal arr() As Double,
ByVal searchValue As Double) As Double
Dim i As Integer = 0
While i <= UBound(arr) AndAlso arr(i) <> searchValue
' If i is greater than UBound(arr), searchValue is not checked.
i += 1
End While
If i > UBound(arr) Then i = -1
Return i
End Function