myGully.com

myGully.com (https://mygully.com/index.php)
-   Programmierung (https://mygully.com/forumdisplay.php?f=67)
-   -   C# gleich/ungleich Operatoren (https://mygully.com/showthread.php?t=2186463)

m3zz0w1x 18.12.10 21:07

C# gleich/ungleich Operatoren
 
Hi,

weiß jemand von Euch ob die Gleich- (==) und Ungleich-Operatoren (!=) in C# (und in jeder Plattform-Version) unabhängig behandelt werden?

Also gibt es einen Unterschied zwischen

Code:

if (!(x==x)) {
 ..do_something()..
}

und

Code:

if (x!=x) {
 ..do_something()..
}


Die Frage ist letztendlich, ob man in C# die Anweisung nach der if-Abfrage erreichen kann:

Code:

if (x==x && x!=x) {
... der Code hier soll erreicht werden ...
}


Xalir 18.12.10 22:03

Mich entzieht zwar der Sinn Deiner Frage, aber keiner der Codeschnipsel wird die Funktion do_something erreichen da immer x==x ist. Einzige Ausnahme wäre beim Shadowing, wo x != x sein kann.

m3zz0w1x 18.12.10 22:15

Zitat:

Zitat von Xalir (Beitrag 21668644)
Mich entzieht zwar der Sinn Deiner Frage, aber keiner der Codeschnipsel wird die Funktion do_something erreichen da immer x==x ist. Einzige Ausnahme wäre beim Shadowing, wo x != x sein kann.

Ok, es gilt zu beachten, dass x ein eigener Klassentyp ist!
Und doch, do_something ist erreichbar.

Meine eigentliche Frage betrifft aber die Operatoren und ob das bei allen C#-Versionen/.NET-Frameworks gleich ist.

Xalir 18.12.10 22:40

Operatorenbehandlung ist seit der Einführung von C# gleichgeblieben. Du kannst also darauf vertrauen, egal unter welcher .NET-Version Du Dein Projekt kompilierst das die Operatoren gleich funktionieren.

Edit: [Link nur für registrierte und freigeschaltete Mitglieder sichtbar. Jetzt registrieren...]

m3zz0w1x 18.12.10 23:12

Die Frage ist aber ob

Code:

(!(1==1))
und

Code:

(1!=1)
in C# auch unterschiedlich behandelt werden.

Mit meinem Klassentyp soll es möglich sein, dass eine Anweisung nach if (x==x && x!=x) erfolgen kann...

Code:

CryptoObject crpt = new CryptoObject(Crypto_Steel);

if (crypt==crypt && crypt!=crypt)
 crypt.ObjectSecure = true;
else
 crypt.Dispose();


Xalir 19.12.10 01:18

Nein, == und != sind arithmetische Vergleichsoperatoren, während ! ein unärer Operator ist.
! dreht einfach den booleschen Wert um. Aus true wird false und umgekehrt.

Überlädst Du aber bsw. die Vergleichsoperatoren == und != dann gibt es ein Spezialfall, wo ! ein unerwartetes Ergebnis bringt.

Code:

public static bool operator==(object obj1, object obj2)
{
    return obj1.Equals(obj2)
}

public static bool operator!=(object obj1, object obj2)
{
    if obj1.Equals(obj2) then
        return true
    return false
}

Nun ergibt zwar !(1==1) immer noch false, aber 1!=1 ergibt nun true.

m3zz0w1x 19.12.10 02:03

Danke!
Genau das wollte ich wissen!

Komm mit MS-Technologien eher selten in Berührung.

cribre82 29.12.10 12:49

Irre. :unibrow:

m3zz0w1x 29.12.10 13:32

Zitat:

Zitat von cribre82 (Beitrag 21709099)
Irre. :unibrow:

Was oder wer ist irre?


Alle Zeitangaben in WEZ +1. Es ist jetzt 08:50 Uhr.

Powered by vBulletin® (Deutsch)
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.