5 Stimmen

Fährt der Compiler mit der Auswertung eines Ausdrucks fort, bei dem alle wahr sein müssen, wenn der erste Ausdruck falsch ist?

Ich bin mir sicher, dass diese Frage schon einmal beantwortet wurde, also entschuldige ich mich, aber ich konnte nicht die richtigen Suchbegriffe finden, um die Antwort zu finden.

Ist in dem folgenden Codebeispiel db.GetRecords().Any() hingerichtet werden?

string s = "Z";
bool x = s.IndexOfAny(new[] { 'A', 'B' }) > 0 &&
         db.GetRecords().Any();

11voto

jason Punkte 227577

Nein. Beide && y || werden bewertet durch Kurzschlussauswertung . Dies bedeutet, dass a && b gibt false zurück, wenn a falsch ist und a || b gibt true zurück, wenn a wahr ist und es wird nicht ausgewertet b in einem dieser Fälle.

Wenn Sie aus irgendeinem Grund keine Kurzschlussauswertung wünschen, können Sie die bitweisen Operatoren verwenden & y | .

2voto

Justin Niessner Punkte 235353

Nein. Die && Operator einen Kurzschluss (d. h. er bricht die Auswertung des Ausdrucks ab, wenn ein Teil des Ausdrucks als falsch ausgewertet wird).

El || Operator schließt sich ebenfalls kurz, hört aber auf zu evaluieren, nachdem ein Teil des Ausdrucks als wahr evaluiert wurde.

2voto

Pablo Santa Cruz Punkte 169147

Nein, C# verwendet Kurzschluss und. Die Antwort lautet also no .

Wenn Sie beide auswerten müssen, verwenden Sie den NON-SHORT-CIRCUIT-Operator, indem Sie nur ein kaufmännisches Und verwenden & .

tring s = "Z";
bool x = s.IndexOfAny(new[] { 'A', 'B' }) > 0 &
         db.GetRecords().Any();

Bitte beachten Sie die einzelnen & .

2voto

2voto

Will Marcouiller Punkte 23205

Ich sage, dass für ein C#-Logik-AND ( && ), die zweite, dass ein Ausdruck falsch ist, da sie alle wahr sein müssen, damit der Ausdruck wahr ist, bricht der Compiler die Auswertung sofort ab.

&& Operator (C#-Referenz)

Der Operator für bedingte UND-Verknüpfungen (&&) führt eine logische UND-Verknüpfung seiner boolschen Operanden durch, wertet aber nur seinen zweiten Operanden aus, wenn dies erforderlich ist.

Im Gegensatz zu einem Logik-AND ist das Logik-OR ( || ) muss nur ein einziger Ausdruck von allen wahr sein, damit der gesamte Ausdruck wahr ist. Anstatt also einen Kurzschluss über eine false Bewertung, die || Operator veranlasst den Compiler, einen Kurzschluss über eine wahre Auswertung zu machen.

|| Operator (C#-Referenz)

Nun, das ist das Verhalten des C#-Compilers, aber das bedeutet nicht, dass jeder Compiler so arbeitet, denn in VB.NET gibt es zwei logische UND-Operatoren ( And , AndAlso ), und zwei logische ODER-Operatoren ( Or , OrElse ). Die Website And Operator, der sowohl für bitweise als auch für logische Verknüpfungen verwendet wird, macht keinen Kurzschluss, wenn der erste Ausdruck falsch ist und wertet den anderen trotzdem aus, während AndAlso schliesst die Auswertung kurz, wenn der erste logische Ausdruck falsch ist. Das ist dasselbe mit Or y OrElse , donde Or keinen Kurzschluss verursacht, und OrElse tut.

Und Operator (Visual Basic)

Führt eine logische Konjunktion mit zwei booleschen Ausdrücken oder eine bitweise Konjunktion mit zwei numerischen Ausdrücken durch.

AndAlso-Operator (Visual Basic)

Führt eine kurzschließende logische Konjunktion mit zwei Ausdrücken durch.

Oder-Operator (Visual Basic)

Führt eine logische Disjunktion bei zwei booleschen Ausdrücken oder eine bitweise Disjunktion bei zwei numerischen Ausdrücken durch.

OrElse-Operator (Visual Basic)

Führt einen Kurzschluss inklusive logischer Disjunktion an zwei Ausdrücken durch.

Kurz gesagt, ich würde sagen, dass dies vom Compiler abhängt, mit dem Sie arbeiten. Wie für C#, es tut Kurzschluss.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X