Na da war ja wohl jemand ganz übereifrig beim Entwickeln 😉
Na da war ja wohl jemand ganz übereifrig beim Entwickeln 😉
Warum?
Hast wohl die Bilder in den Beiträgen ausgeschalten oder?
Nö, ich sehe das Bild. Ich kann nur keinen Grund erkennen, warum da jemand übereifrig gewesen sein sollte...
Gruß,
dN!3L
Hallo,
das Ergebnis ist - auch wenn du es anders erwartest - korrekt.
Siehe auch Compare-Methode
mfG Gü
Stellt fachliche Fragen bitte im Forum, damit von den Antworten alle profitieren. Daher beantworte ich solche Fragen nicht per PM.
"Alle sagten, das geht nicht! Dann kam einer, der wusste das nicht - und hat's gemacht!"
Klar is alles korrekt, ich finds nur komisch dass der Comparer je nach Typ unterschiedliche Ergebnisse liefert, einmal einfach nur 1 oder -1 und bei allem was kleiner als ein int ist, den genauen unterschied.
das Ergebnis ist - auch wenn du es anders erwartest - korrekt.
Eben. Wichtig beim Ergebnis der Compare-Methode ist einzig und allein das Vorzeichen (und ob es 0 ist). Alles Weitere ist internes Implementierungsdetail.
Und der einfachste Algorithmus ist "ersteZahl minus zweiteZahl". Also war der Entwickler bei Short eher faul. 😉 Oder bei den anderen drei Datentypen übereifrig... 🤔
Gruß,
dN!3L
Hallo tkrasinger,
kannst du nochmal ganz laaangsam, ausführlich und zum Mitschreiben erklären, was dein Problem ist? Und was das ganze mit dem Titel zu tun hat?
herbivore
kannst du nochmal ganz laaangsam, ausführlich und zum Mitschreiben erklären, was dein Problem ist? Und was das ganze mit dem Titel zu tun hat?
vergiss es einfach und lösch den Thread. Ist nicht so angekommen wie ich dachte.
Hallo tkrasinger,
ich finds nur komisch dass der Comparer je nach Typ unterschiedliche Ergebnisse liefert
naja, es gibt ja eine ganz logische Erklärung. Wie dN!3L schon sagt, will man Compare am liebsten und effizientesten als Rückgabe der Differenz der zu vergleichenden Werte implementieren. Nun ist aber der Rückgabetyp von Compare ein int. Die Differenz von zwei shorts passt immer in den Wertebereich eines ints. Die Differenz von zwei ints (longs, decimals) passt aber nicht immer in den Wertebereich eines ints. Deshalb kann man bei short die Implementierung mit der Differenz verwenden, aber bei int aber nicht.
Ist nicht so angekommen wie ich dachte.
Mir scheint, du hast diesen Umstand einfach übersehen und wolltest nun das dadurch für dich Unverständliche dem Entwickler anlasten, den wir hier aber eindeutig und nachdrücklich rehabilitieren müssen ...
lösch den Thread
... weshalb ich auch den Thread nicht sofort entfernen werde.
herbivore
Mir scheint, du hast diesen Umstand einfach übersehen
Ja, das hab ich in dem Zusammenhang nicht bedacht, weil mir bis dato noch nie ein Comparer untergekommen ist der nicht -1, 0 oder 1 geliefert hat.
und wolltest nun das dadurch für dich Unverständliche dem Entwickler anlasten, den wir hier aber eindeutig und nachdrücklich rehabilitieren müssen ...
Nein das wollt ich sicher nicht, es is halt einfach nur komisch, von einer Compare-Methode die bei x-Datentypen immer nur 3 verschiedene Ergebnisse liefert, auf einmal was anders zu bekommen.
if( Comparer<A>.Default.Compare(a,b) == Comparer<B>.Default(c,d))
funktioniert nämlich nur solange A und B kleiner als int sind bzw. A und B größer gleich int sind. Ist A int und B short funktioniert der Vergleich nicht mehr.
In diese Falle bin ich eben geraten. Mein Fehler
Hallo tkrasinger,
so geht es in jedem Fall:
if(Math.Sign (Comparer<A>.Default.Compare(a,b)) == Math.Sign (Comparer<B>.Default(c,d)))
herbivore
Ja klar, das hab ich dann ja auch gemacht, als ich gemerkt hatte, dass der short anders arbeitet.
PS: Mann könnte natürlich auch:
Comparer<int>.Default.Compare(Comparer<A>.Default.Compare(a,b),Comparer<B>.Default.Compare(c,d))
schreiben.