Verkettete IF-Struktur

7

Stellen Sie sich diesen Fall vor, wo ich ein Objekt habe, dass ich eine Eigenschaft überprüfen muss. Das Objekt kann jedoch derzeit einen Nullwert haben.

Wie kann ich diese beiden Bedingungen in einer einzigen "if" Bedingung überprüfen?

Momentan muss ich so etwas tun:

%Vor%

Ich möchte etwas wie das:

%Vor%

Ich möchte die zweite Bedingung nur dann bewerten, wenn die erste richtig war.

Vielleicht vermisse ich etwas, und deshalb brauche ich deine Hilfe; -)

    
Nelson Reis 17.12.2008, 14:51
quelle

10 Antworten

43
%Vor%

&& ist ein Kurzschlusslogiktest - es wertet nur die rechte Seite aus, wenn die linke Seite wahr ist. Kontrast zu "a & amp; b", der immer beide Seiten bewertet (und bitweise "und")

    
Marc Gravell 17.12.2008, 14:53
quelle
10

Es sollte betont werden, dass die kurzgeschlossene Bewertung der & amp; & amp; in der if () ist absolut garantiert durch die Sprachstandards (C, C ++, Java und C #). So ist es seit der ersten Ausgabe von K & amp; Rs " C Programmiersprache ".

Es ist nicht etwas, worüber Sie sich Sorgen machen müssen "Implementiert mein Compiler das?". Wenn definitiv .

    
James Curran 17.12.2008 15:08
quelle
5
%Vor%

Dies ist sicher, weil der Operator & amp; & amp; wird lazy ausgewertet, was bedeutet, dass, wenn die LHS falsch ist, die RHS nie ausgewertet wird

    
spender 17.12.2008 14:54
quelle
4

Dieser Code wird zuerst überprüfen, ob myObject nicht null ist, in dem Fall, dass es wahr ist, wird es die nächste Bedingung überprüfen, in dem Fall, dass es nicht wahr ist, wird es die nächste Bedingung nicht überprüfen und den Code nicht ausführen.

%Vor%     
Tom Wijsman 17.12.2008 14:56
quelle
3

Sie haben viele gute Antworten darauf, wie es geht. Ich möchte nur eine Warnung vorbringen, wie ich es nicht tun soll. Nicht den einzelnen Test für ID = pid in einem try-catch-Block umbrechen. Es ist verschwenderisch und würde die Einführung der Ausnahmeprüfung einbeziehen, um eine nicht außergewöhnliche Bedingung zu erfassen. Es ist so eine schlechte Idee, dass ich es nicht einmal mit einem Beispiel illustriere.

    
tvanfosson 17.12.2008 15:00
quelle
1
%Vor%     
Jim C 17.12.2008 14:55
quelle
1
%Vor%     
sthay 17.12.2008 15:25
quelle
1

Ich denke, dass es für andere hilfreich sein kann, diese Frage in Zukunft zu betrachten. Wie gesagt, unter Verwendung von & amp; & amp; bietet die gewünschte Funktionalität. Aber, es sollte auch bemerkt werden, dass die Funktionalität, die Sie befürchteten, dass beide Seiten ungeachtet des Ergebnisses der ersten Bewertung bewertet würden, durch Verwendung von & amp; anstelle von & amp; & amp; Also:

%Vor%

Auch in diesem Beispiel wollen Sie diesen Code NICHT. Ich wollte es einfach zur Konversation hinzufügen, da es Fälle geben kann (obwohl ich noch nie eine gefunden habe), wo dies die gewünschte Funktionalität ist, zum Beispiel:

%Vor%     
Timothy Carter 17.12.2008 20:48
quelle
1

Ich denke, dass Sie in VB.net das Keyword andAlso als Alternative zu diesem Verhalten verwenden können. So etwas wie ...

%Vor%

Stimmt genau das gleiche, aber ich denke es gibt es als Alternative!

Bearbeiten: C # in VB.net oben geändert

    
chillysapien 17.12.2008 15:48
quelle
1

Sie können & amp; um zwei Bedingungen auszuwerten, aber wenn Sie die zweite nur dann testen möchten, wenn das erste Element wahr ist, können Sie & amp; & amp;;.

verwenden

Auf Portugiesisch heißt das: "AND com curto circuito".

%Vor%

Wenn myObject falsch ist, können Sie myObject.Id nicht testen, da myObject null ist und Sie nicht auf eine Eigenschaft eines null-Objekts zugreifen können.

:::::::::::::::::::::

a b a & amp; & amp; b

wahr wahr wahr

richtig falsch falsch

falsch wahr falsch

falsch falsch falsch

:::::::::::::::::::::

    
Guilherme Ferreira 12.01.2010 10:42
quelle

Tags und Links