AndAlso-Operator (Visual Basic)
Führt eine logische Kurzschlusskonjunktion zweier Ausdrücke aus.
result = expression1 AndAlso expression2
Bestandteile
Ausdruck |
Definition |
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 Operators AndAlso 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 Operator AndAlso bewirkt jedoch, dass der Compiler den Zugriff auf initFinished umgeht, wenn newObject den Wert Nothing hat, da Nothing False ergibt.
Datentypen
Der Operator AndAlso 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 (Visual Basic) 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 Operators And und des Operators IsFalse beeinflusst das Verhalten des Operators AndAlso. 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 (Visual Basic).
Beispiel
In diesem Beispiel wird mit dem Operator AndAlso 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
Referenz
Logische/bitweise Operatoren (Visual Basic)
Operatorrangfolge in Visual Basic
Operatoren sortiert nach Funktionalität (Visual Basic)
IsFalse-Operator (Visual Basic)