Entwickler-Ecke

WinForms - If-Abfrage mit mehreren getrennten Bedingungen


bugmenot - Fr 24.07.15 20:48
Titel: If-Abfrage mit mehreren getrennten Bedingungen
Ich möchte gerne eine If-Abfrage erstellen, bei der mehrere Bedingungen getrennt erfüllt sein sollen.
Erklärt:

Bis jetzt habe ich versucht:

C#-Quelltext
1:
2:
3:
4:
if (Bedingung1 && Bedingung2 == true || Bedingung2 && Bedingung3 == true)
{
    mach irgendwas!
}

Dabei hat er "mach irgendwas!" auch ausgeführt, wenn die Bedingungen 1 und 3 beide true waren, während Bedingung 2 false war.

Wie kann ich also die Bedingungen "trennen"? Das "||" scheint ja nicht zu funktionieren...


Ralf Jansen - Fr 24.07.15 21:50

Ein Bedingung ist bereits ein boolscher Ausdruck und damit true oder false. Da brauch mann dann nicht mehr mit true oder false zu vergleichen die Bedingung ist bereits true oder false. Also einfach


C#-Quelltext
1:
if ((Bedingung1 && Bedingung2) || (Bedingung2 && Bedingung3))                    


Th69 - Sa 25.07.15 07:16

Hallo,

außerdem kommt es bei den Ausdrücken auch auf die Operatorpriorität [https://msdn.microsoft.com/de-de/library/Aa691323%28v=VS.71%29.aspx] an: == hat eine höhere Priorität als && und ||, weswegen der Ausdruck als

C#-Quelltext
1:
if (Bedingung1 && (Bedingung2 == true) || Bedingung2 && (Bedingung3 == true))                    

ausgewertet wird (daher dein Ergebnis).

Aufgrund der o.g. Operatorpriorität reicht es sogar, den Ausdruck von Ralf ohne Klammern als

C#-Quelltext
1:
if (Bedingung1 && Bedingung2 || Bedingung2 && Bedingung3)                    

zu schreiben (auch wenn es mit den Klammern lesbarer und verständlicher ist).
Und diesen kann man sogar aufgrund der De Morgansche Regeln [https://de.wikipedia.org/wiki/De_Morgansche_Gesetze] zu

C#-Quelltext
1:
if ((Bedingung1 || Bedingung3) && Bedingung2)                    

verkürzen.