AndAlso-Operator
Aktualisiert: November 2007
Führt eine logische Kurzschlusskonjunktion zweier Ausdrücke aus.
result = expression1 AndAlso expression2
Bestandteile
result
Erforderlich. Beliebiger Boolean-Ausdruck. Das Ergebnis ist das Boolean-Ergebnis des Vergleichs zwischen zwei Ausdrücken.expression1
Erforderlich. Beliebiger Boolean-Ausdruck.expression2
Erforderlich. Beliebiger Boolean-Ausdruck.
Hinweise
Eine logische Operation wird als Kurzschlussoperation bezeichnet, wenn der kompilierte Code die Auswertung eines Ausdrucks abhängig von dem Ergebnis eines anderen Ausdrucks umgehen kann. Wenn das Ergebnis des ersten ausgewerteten Ausdrucks das Endergebnis der Operation bestimmt, muss der zweite Ausdruck nicht ausgewertet werden, da dieser das Endergebnis nicht ändern kann. Kurzschlussoperationen können zu einer Leistungssteigerung führen, wenn der umgangene Ausdruck sehr komplex ist oder Prozeduraufrufe enthält.
Wenn beide Ausdrücke True ergeben, ist result ebenfalls True. Die folgende Tabelle veranschaulicht, wie result bestimmt wird.
Wenn expression1 gleich |
und expression2 gleich |
hat result den Wert |
---|---|---|
True |
True |
True |
True |
False |
False |
False |
(nicht ausgewertet) |
False |
Ein Verwendungszweck des AndAlso-Operators besteht darin, das Vorhandensein einer Objektinstanz zu testen, bevor der Zugriff auf einen ihrer Member versucht wird. Die folgende Codezeile veranschaulicht dies.
If newObject AndAlso newObject.initFinished Then
Durch den Zugriff auf die initFinished-Eigenschaft in der obigen Codezeile kann eine NullReferenceException-Ausnahme ausgelöst werden, wenn der newObject-Variablen keine Objektinstanz zugewiesen war. Der AndAlso-Operator bewirkt jedoch, dass der Compiler den Zugriff auf initFinished umgeht, wenn newObject den Wert Nothing hat, da NothingFalse ergibt.
Datentypen
Der AndAlso-Operator wird nur für den Boolean-Datentyp (Visual Basic) definiert. Visual Basic konvertiert jeden Operanden je nach Bedarf in Boolean-Werte und führt die Operation ganz als Boolean aus. Wenn Sie das Ergebnis einem numerischen Typ zuweisen, konvertiert Visual Basic es vom Boolean-Typ in diesen Typ. Dies kann zu unerwartetem Verhalten führen. Bei der Konvertierung in Integer ergibt 5 AndAlso 12 z. B. –1.
Überladen
Der And-Operator (Visual Basic) und der IsFalse-Operator können überladen werden. Das bedeutet, dass eine Klasse oder Struktur ihr Verhalten neu definiert, wenn ein Operand den Typ dieser Klasse oder Struktur aufweist. Das Überladen des And-Operators und des IsFalse-Operators beeinflusst das Verhalten des AndAlso-Operators. Wenn im Code AndAlso für eine Klasse oder Struktur verwendet wird, die And und IsFalse überlädt, müssen Sie das neu definierte Verhalten der Operatoren kennen. Weitere Informationen finden Sie unter Operatorprozeduren.
Beispiel
In diesem Beispiel wird mit dem AndAlso-Operator eine logische Konjunktion zweier Ausdrücke ausgeführt. Das Ergebnis ist ein Boolean-Wert, der darstellt, ob der gesamte verbundene Ausdruck True ist. Wenn der erste Ausdruck False ist, wird der zweite nicht ausgewertet.
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
Durch das vorangehende Beispiel werden die Ergebnisse True, False bzw. False erzeugt. Bei der Berechnung von secondCheck wird der zweite Ausdruck nicht ausgewertet, da der erste Ausdruck bereits False ist. Der zweite Ausdruck wird jedoch bei der Berechnung von thirdCheck ausgewertet.
Das folgende Beispiel zeigt eine Function-Prozedur, die in den Elementen eines Arrays nach einem gegebenen Wert sucht. Wenn das Array leer ist oder die zulässige Arraylänge überschritten wurde, wird das Arrayelement von der While-Anweisung nicht auf den Suchwert überprüft.
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
Siehe auch
Konzepte
Logische und bitweise Operatoren in Visual Basic
Referenz
Operatorrangfolge in Visual Basic