Entwickler-Ecke
C# - Die Sprache - INT Variablen mit Oder
GamerIII - So 02.12.12 02:27
Titel: INT Variablen mit Oder
Hallo! :welcome:
habe schon länger gesucht bin aber nicht fündig geworden.
Und zwar will ich einen If-Befehl machen bei dem eine INT Variable mit mindestens einer anderen übereinstimmt.
Habe dafür Or | genommen aber wie ich es auch versuche es will einfach nicht was mache ich falsch?
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10:
| private void btnControl_Click(object sender, EventArgs e) { if (Zeile == 1) { if (Farbe2 | Farbe3 | Farbe4 == Feld1) { Label1.BackColor = Color.Red; } } } |
Moderiert von
Christian S.: Topic aus WinForms verschoben am So 02.12.2012 um 10:43
Palladin007 - So 02.12.12 04:06
Du kannst mit dem OR-Operator | nur für komplette Vergleiche eine OR-Berechnung durchführen lassen.
Es werden also die Ergebnisse von mehreren Vergleichen aneinander gehängt und wenn min. eines davon
true ist, ist das Gesamt-Ergebnis ebenfalls
true.
Bei dir würde das dann so aussehen:
C#-Quelltext
1: 2: 3: 4:
| if (Farbe2 == Feld1 | Farbe3 == Feld1 | Farbe4 == Feld1) { } |
GamerIII - So 02.12.12 16:51
Danke :)
es geht jetzt alles :)
Ralf Jansen - So 02.12.12 17:17
Wenns mehr als 3 Werte werden und damit der Vergleich potentiell unleserlich kann man sich mal kurz mit einer Liste und den entsprechenden LINQ Methoden behelfen.
C#-Quelltext
1: 2: 3: 4:
| if ((new[] { Farbe2, Farbe3, Farbe4 }).Contains(Farbe4)) { } |
Ralf Jansen - So 02.12.12 17:18
Ralf Jansen hat folgendes geschrieben : |
Wenns mehr als 3 Werte werden und damit der Vergleich potentiell unleserlich kann man sich mal kurz mit einer Liste und den entsprechenden LINQ Methoden behelfen.
C#-Quelltext 1: 2: 3: 4:
| if ((new[] { Farbe2, Farbe3, Farbe4 }).Contains(Farbe1)) { } | |
Palladin007 - So 02.12.12 17:45
Ralf, da hat sich dein Beitrag wohl selber zitiert ^^
Zum binären und logischen Oder:
Stimmt, aber gab es da nicht auch die Regel, dass beim binären Oder nur so lange verglichen wird, bis es true ergibt und folgende Vergleiche danach ignoriert werden?
Irgendwo hab ich das mal gelesen und immer, wenn ich es versucht hab, hat es nicht geklappt :D
Wäre nämlich ganz sinnvoll, dann kann man die Überprüfung, ob ein Objekt instanziiert ist, in der selben if-Abfrage lassen und muss es nicht so schreiben:
C#-Quelltext
1: 2: 3:
| if (person != null) if (person.Alter >= 18) { } |
Ralf Jansen - So 02.12.12 17:54
Zitat: |
Ralf, da hat sich dein Beitrag wohl selber zitiert ^^ |
Such den Unterschied ;) Ich werde das mit dem Bearbeiten von Beiträgen nochmal üben.
Zitat: |
Wäre nämlich ganz sinnvoll, dann kann man die Überprüfung, ob ein Objekt instanziiert ist, in der selben if-Abfrage lassen und muss es nicht so schreiben: |
Musst du auch nicht. Die logischen Operatoren benutzen die Kurzschlussauswertung (Klingt in deutsch irgendwie bescheiden)
Palladin007 - So 02.12.12 18:54
Also wenn es da einen Unterschied gibt, finde ich ihn nicht. :gruebel:
Also kann ich theoretisch einfach so schreiben:
C#-Quelltext
1: 2:
| if (person != null && person.Alter >= 18) { } |
Gut, das ist jetzt kein OR, aber auch hier hab ich das gleiche gelesen, dass bei && alles verglichen wird, egal ob davor schon eines false war. Bei einem einzelnen &, wenn es irgendwo false ergibt, wird dann abgebrochen und nicht weiter geprüft, allerdings hat das bei mir nie funktioniert, immer der gleiche Fehler, wenn person nicht instanziiert ist.
Ralf Jansen - So 02.12.12 19:07
Nicht nur theoretisch sondern auch ganz praktisch. Wenn das bei dir nicht geht solltest du uns mal ein kompilierbares Beispiel zeigen das das falsche Verhalten zeigt und knallt.
Das folgende knallt definitiv nicht.
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14:
| class Person { public int Alter { get; set; } } class Program { static void Main(string[] args) { Person p = null;
if (p != null && p.Alter >= 18) {} else Console.Write("funzt"); } } |
Th69 - So 02.12.12 20:39
Hallo Palladin700,
ich glaube, du hast jetzt die beiden Operatorarten (logisch und binär) verwechselt.
Und nur bei den logischen Operatoren macht die Kurzschlußauswertung (short-cicuit evaluation) auch Sinn. Bei den binären Operatoren wäre es ziemlich blöd, wenn das Ergebnis plötzlich einige Bits verschlucken würde.
Palladin007 - So 02.12.12 22:05
Naja, ich meine eigentlich genau das, was Ralf Jansen in seinem Beispiel gezeigt hat.
Ich probiere bei Zeiten mal rum und wenn ich den Fehler wieder bekomme, dann poste ich den Code hier. ^^
Christoph1972 - So 02.12.12 23:14
Ralf Jansen hat folgendes geschrieben : |
Wenns mehr als 3 Werte werden und damit der Vergleich potentiell unleserlich kann man sich mal kurz mit einer Liste und den entsprechenden LINQ Methoden behelfen.
C#-Quelltext 1: 2: 3: 4:
| if ((new[] { Farbe2, Farbe3, Farbe4 }).Contains(Farbe4)) { } | |
Gute Idee, gefällt mir sehr gut!
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!