Frage

In VB.NET, was ist der Unterschied zwischen And und AndAlso? Welche soll ich verwenden?

War es hilfreich?

Lösung

Der And Operator wertet beide Seiten, wo AndAlso die rechte Seite ausgewertet wird, wenn und nur wenn die linke Seite wahr ist.

Ein Beispiel:

If mystring IsNot Nothing And mystring.Contains("Foo") Then
  ' bla bla
End If

Die oben wirft eine Ausnahme, wenn mystring = Nothing

If mystring IsNot Nothing AndAlso mystring.Contains("Foo") Then
  ' bla bla
End If

Dies ist nicht eine Ausnahme aus.

Wenn Sie also von der C # Welt kommen, sollten Sie AndAlso verwenden, wie Sie && verwenden würden.

Weitere Informationen hier: http: / /www.panopticoncentral.net/2003/08/18/the-ballad-of-andalso-and-orelse/

Andere Tipps

Der And wird von einem Operator alle Bedingungen in der Aussage überprüfen, bevor Sie fortfahren, während der AndAlso Betreiber stoppt, wenn es der Zustand kennt falsch ist. Zum Beispiel:

if x = 5 And y = 7

Prüft, ob x gleich 5 ist, und wenn y gleich 7 ist, geht dann, wenn beide wahr sind.

if x = 5 AndAlso y = 7

überprüft, ob x gleich 5 ist, wenn es nicht ist, ist es nicht zu überprüfen, ob y 7, weil sie weiß, dass die Bedingung bereits falsch ist. (Dies ist ein Kurzschluss genannt.)

Im Allgemeinen nutzen die Menschen die Kurzschluss Methode, wenn es ein Grund ist ausdrücklich nicht den zweiten Teil zu prüfen, ob der erste Teil nicht wahr ist, wie wenn es wäre eine Ausnahme auslösen, wenn geprüft. Zum Beispiel:

If Not Object Is Nothing AndAlso Object.Load()

Wenn das verwendete And statt AndAlso, wäre es immer noch versuchen sogar Object.Load() wenn es nothing, die eine Ausnahme auslösen würde.

Interessanter keine der Antworten erwähnt, dass And und Or in VB.NET sind Bitoperatoren während OrElse und AndAlso sind streng Booleschen Operatoren.

Dim a = 3 OR 5 ' Will set a to the value 7, 011 or 101 = 111
Dim a = 3 And 5 ' Will set a to the value 1, 011 and 101 = 001
Dim b = 3 OrElse 5 ' Will set b to the value true and not evaluate the 5
Dim b = 3 AndAlso 5 ' Will set b to the value true after evaluating the 5
Dim c = 0 AndAlso 5 ' Will set c to the value false and not evaluate the 5

Hinweis : ein nicht Null integer gilt als true; Dim e = not 0 wird e auf -1 Not demonstriert ist auch ein bisschen Operator.

|| und && (die C # Versionen von OrElse und AndAlso) Rückkehr des zuletzt ausgewerteten Ausdrucks, die jeweils 3 und 5 würden. Auf diese Weise können Sie das Idiom v || 5 in C # 5 als der Wert des Ausdrucks zu geben, wenn v null oder (0 und eine ganze Zahl) ist und der Wert von v anders. Der Unterschied in der Semantik kann einen C # Programmierer in VB.NET unvorbereitet, da dieses „Standardwert Idiom“ Dilettantismus fängt in VB.NET nicht funktioniert.

Also, die Frage zu beantworten : Verwenden Sie Or und And für Bit-Operationen (integer oder Boolean). Verwenden Sie OrElse und AndAlso zu „Kurzschluss“ eine Betriebszeit zu speichern, oder testen Sie die Gültigkeit einer Auswertung, bevor es zu bewerten. If valid(evaluation) andalso evaluation then oder if not (unsafe(evaluation) orelse (not evaluation)) then

Bonus: Was ist der Wert der folgenden

?
Dim e = Not 0 And 3
If Bool1 And Bool2 Then

Wertet beide Bool1 und Bool2

If Bool1 AndAlso Bool2 Then

Wertet Bool2, wenn und nur wenn Bool1 wahr ist.

Gerade für all jene Menschen, die sagen, Nebenwirkungen sind böse: a. Ort, an dem in einem Zustand zwei Nebenwirkungen gut ist würde das Lesen zwei Dateiobjekte in tandem

While File1.Seek_Next_Row() And File2.Seek_Next_Row()
    Str1 = File1.GetRow()
    Str2 = File2.GetRow()
End While

die And ist sichergestellt, dass eine Reihe jedes Mal verbraucht wird die Bedingung geprüft wird. Während AndAlso könnte die letzte Zeile von File1 lesen und verlassen File2 ohne verbraucht Linie.

Natürlich über den Code nicht funktionieren würde, aber ich benutze Nebenwirkungen wie dies die ganze Zeit und würde es nicht als „ schlecht “ oder „ böse “ Code wie einige würden Sie glauben führen. Es ist leicht zu lesen und effizient.

Eine einfache Möglichkeit, darüber nachzudenken, es auch schlichtere Englisch wird mit

If Bool1 And Bool2 Then
If [both are true] Then


If Bool1 AndAlso Bool2 Then
If [first is true then evaluate the second] Then

AndAlso ist ähnlich wie Und, außer es wie && in C # funktioniert, C ++, etc.

Der Unterschied besteht darin, dass, wenn die erste Klausel (die vor AndAlso) wahr ist, wird die zweite Klausel nie ausgewertet - die Verbindung logische Ausdruck „kurzgeschlossen“

.

Das ist manchmal sehr nützlich, z.B. in einem Ausdruck wie:

If Not IsNull(myObj) AndAlso myObj.SomeProperty = 3 Then
   ...
End If

die alten und in dem obigen Ausdruck wäre eine Nullreferenceexception auslösen, wenn myObj null war.

Auch Stack-Überlauf Frage finden Sie unter: Sollte ich immer verwenden, um die AndAlso und OrElse Operatoren

Auch: Ein Kommentar für diejenigen, die And erwähnt zu verwenden, wenn die rechte Seite des Ausdrucks eine Nebenwirkung, die Sie brauchen:

Wenn die rechte Seite eine Nebenwirkung, die Sie brauchen, nur bewegen sie auf der linken Seite anstatt mit „Und“. Sie müssen nur wirklich „Und“ wenn beide Seiten Nebenwirkungen haben. Und wenn Sie, dass viele Nebenwirkungen gehen auf Sie wahrscheinlich etwas anderes falsch zu machen. In der Regel sollten Sie wirklich AndAlso bevorzugen.

Zusätzlich zu den Antworten oben, AndAlso ein Konditionierungsverfahren als Kurzschlüsse bekannt. Viele Programmiersprachen haben diese Funktionalität eingebaut wie vb.net tut, und kann erhebliche Leistungssteigerungen lange Zustand Aussagen liefern durch Auswertungen Ausschneiden, die unnötigen sind.

Ein weiterer ähnlicher Zustand ist die OrElse Bedingung, die nur den richtigen Zustand überprüfen würde, wenn die linke Bedingung falsch ist, so unnötigen Zustand überprüft Ausschneiden nach einem wahren Zustand gefunden wird.

Ich würde Ihnen raten, immer Kurzschlüsse Prozesse zu nutzen und strukturieren Ihre bedingte Anweisungen in einer Weise, die die meisten von diesen profitieren können. Zum Beispiel testen Sie Ihre effizientesten und schnellste Bedingungen zunächst so, dass Sie nur Ihre lang Bedingungen ausgeführt werden, wenn Sie unbedingt und Kurzschluss der anderen Zeiten.

Für meisten von uns OrElse und AndAlso den Trick mit Ausnahme von ein paar verwirrenden Ausnahmen tun (weniger als 1%, wo wir Oder und und verwenden müssen können).

Versuchen Sie nicht, lassen Sie sich von Menschen ihre boolean Logiken vorführt und macht es wie eine Rakete Wissenschaft aussehen.

Es ist ziemlich einfach und geradlinig und gelegentlich Ihr System möglicherweise nicht wie erwartet, weil es nicht Ihre Logik in erster Linie mag. Und doch Ihr Gehirn hält Sie sagen, dass seine Logik ist zu 100% getestet und bewiesen, und es sollte funktionieren. In diesem Moment zu stoppen Ihr Gehirn zu vertrauen und ihn bitten, wieder zu denken, oder (nicht OrElse oder vielleicht OrElse) Sie sich für einen anderen Job zu suchen zwingen, die nicht viel Logik erfordert.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top