If-Anweisung - 'oder', aber NICHT 'und'

7

Wie kann ich in C Sharp eine if-Anweisung einrichten, die prüft, ob eine von mehreren Bedingungen zutrifft? Es muss nur eine der Bedingungen sein, wenn null oder zwei oder mehr wahr sind, sollte das if falsch sein.

    
Wilson 24.05.2012, 20:56
quelle

6 Antworten

9

Sie könnten eine Hilfsmethode schreiben. Dies hat den Vorteil, dass es kurzschließt und nur genau so viele wie nötig auswertet,

%Vor%     
jason 24.05.2012, 21:03
quelle
5
%Vor%

Linq Implementierung von Jasons Methodensignatur:

%Vor%     
Amy B 24.05.2012 21:04
quelle
5

Sie könnten Ihre booleschen Werte in eine bool Sequenz einfügen und dann LINQ anwenden:

%Vor%

Für nur zwei booleans, exklusiv oder wird viel einfacher:

%Vor%

Bearbeiten Um einen On-Demand-Evaluierungskurzschluss zu erreichen, müssen wir unsere bool -Sequenz in eine Func<bool> -Sequenz (wo jedes Element steht) einstufen ein Funktionsdelegat, der die Bewertung einer Bedingung kapselt:

%Vor%

Das obige Snippet setzt die Existenz eines auf Prädikat basierenden IndexOf -Operators voraus, der unter der aktuellen Version von LINQ nicht verfügbar ist, aber als eine Erweiterungsmethode wie folgt definiert werden kann:

%Vor%

Beispieldaten zum Testen (ein Haltepunkt kann für jedes false oder true festgelegt werden, um der Auswertung zu folgen):

%Vor%     
Douglas 24.05.2012 21:02
quelle
4

Zur Vereinfachung könnten Sie einfach eine laufende Zählung beibehalten:

%Vor%     
Adam V 24.05.2012 20:59
quelle
2

Ich denke, das würde den Trick machen

%Vor%

Wenn ich nicht falsch darüber nachgedacht habe, wird if gleich wie i > 1 falsch sein. Wenn i niemals inkrementiert wird und wir die letzte Bedingung erreichen, wird falsch sein, da i == 0

    
Claudio Redi 24.05.2012 21:04
quelle
0

Die meisten dieser Antworten werden funktionieren und "gute Leistung" haben. Aber die einfachste Antwort ist:

%Vor%

Am Ende wirst du A / B / C mehr als einmal auswerten, also ist das wirklich nur nützlich, wenn du einfache Bools hast.

    
Andrew Hanlon 28.05.2012 17:49
quelle

Tags und Links