Laden...

Verständnisfrage zu '&' + '|'

Erstellt von CyberHunter vor 16 Jahren Letzter Beitrag vor 16 Jahren 1.133 Views
Thema geschlossen
C
CyberHunter Themenstarter:in
131 Beiträge seit 2007
vor 16 Jahren
Verständnisfrage zu '&' + '|'

Hallo zusammen,

kann mir jemand den unterschied zwischen folgenden if anweisungen erklären?



// Wo ist der Unterschied zw. '&' + '&&' ????

if (textBox1.Text == "test" & textBox2.Text == "test")
                Console.WriteLine("erfolgreich");

if (textBox1.Text == "test" && textBox2.Text == "test")
                Console.WriteLine("erfolgreich");

und das gleiche mit dem '|' - Zeichen



// Wo ist der Unterschied zw. '|' + '||' ????

if (textBox1.Text == "test" | textBox2.Text == "test")
                Console.WriteLine("erfolgreich");

if (textBox1.Text == "test" || textBox2.Text == "test")
                Console.WriteLine("erfolgreich");

Danke für eure Hilfe
CyberHunter

C
103 Beiträge seit 2007
vor 16 Jahren

Hallo CyberHunter,

der Unterschied ist eigentlich ganz einfach. Nimmst Du ein & bzw | dann wird in jedem Fall jeder Part der Bedingung geprüft. Nimmst Du zwei, dann prüft er nur so viel wie nötig ist. Bei && reicht schon, wenn die erste Bedingung false ergibt, eventuelle zweite etc werden gar nicht mehr geprüft. Bei || das gleiche in grün. Ist das erste schon true, ist der Rest hinfällig. Praktisch bei Performanceintensiven Prüfungen. Erstmal was prüfen das schnell geht, und das was länger braucht nur im Bedarfsfall noch zusätzlich.

Weitere Details: 🛈 Galileo Openbook C#, Kapitel 3.4.3: Logische Operatoren

Freundliche Grüße,
capcom

49.485 Beiträge seit 2005
vor 16 Jahren

Hallo CyberHunter,

sowas sollte nun wirklich in jedem C# Buch stehen. Siehe [Hinweis] Wie poste ich richtig? Punkt 1.1

herbivore

998 Beiträge seit 2007
vor 16 Jahren

&& bzw || sind logischeVerknüpfungen, während & und | bitweise verknüpfungen sind.

Soweit ich weiß, wird bei && oder || die Auswertung vorzeitig abgebrochen, wenn bei && eine Bedingung false ist (dann ist das Ergebnis auch false) und bei || eine Bedingung wahr ist (dann ist das Gesamtergebnis wahr)

Wenn du es mit & bzw | machst, wertet er alles aus...

Gruß David

5.941 Beiträge seit 2005
vor 16 Jahren

Salute CyberHunter

Abgesehen von der Performance (weniger Prüfungen), ist das bspw. auch für sowas nützlich:


object test = IrgendwattDasNullSeinKoennte;
if(test != null && test.Bla == "blub") {
    
}

D.h. wenn das Objekt null ist, gibt es so auch keine Exception (Null Referenz Ausnahme), bzw. wird nur auf Eigenschaften zugegriffen, wenn es überhaupt möglich ist.

Gruss Peter

--
Microsoft MVP - Visual Developer ASP / ASP.NET, Switzerland 2007 - 2011

915 Beiträge seit 2006
vor 16 Jahren

Bin leider kein so großer erklärbar aber man kann das relativ leicht an einen Beispiel sehen.

Angenommen du frägst nach einer Klasse ab die "Null" sein könnte aber möchtest ebenso abfragen ob ein Proeprty innerhalb dieser Klasse einen bestimmten Wert hat.

Bei der doppelten "Und Und" Anweisung "&&" wird der zweite Wert nur dann überprüft wenn der erstere bereits "true" zurückgibt.

Also Beispiel:


   Form form = null;

            if (form != null && !form.ShowIcon)
                Console.Write("Kein Fehler");

            if (form != null & !form.ShowIcon) <-- Compiler meldet Fehler
                Console.Write("Fehler: Der Objektverweis wurde nicht auf eine Objektinstanz festgelegt.");

Bei doppelter veroderung also || gilt genau das selbe.

Wie vernichtet stand Andreas unter den flammenden Augen seiner Kunden.
Ihm war's, als stünde des Schicksals dunkle Wetterwolke über seinem Haupte X(

998 Beiträge seit 2007
vor 16 Jahren

Traumhafte Erklärung Andreas 😁

Gruß David

49.485 Beiträge seit 2005
vor 16 Jahren

Hallo DavidT,

&& bzw || sind logischeVerknüpfungen, während & und | bitweise verknüpfungen sind.

in C ist das so, in C# nicht. Da sind & und | auch als logische Operatoren definiert.

Compiler meldet Fehler: Der Objektverweis wurde nicht auf eine Objektinstanz festgelegt.

Eben leider nicht der Compiler. Dann würde es ja noch gehen, sondern das wäre leider ein Laufzeitfehler.

Noch ein Grund, warum solche grundlegenden bzw. Standard-Fragen nicht in Foren, sondern aus Büchern beantwortet werden sollten. Sie sind in solcherlei Hinsicht verlässlicher.

Ich schließe das aus diesem Grund hier auch mal.

herbivore

Thema geschlossen