Was ist Ihr Ansatz zum Schreiben von Gleichheitsprüfungen für die structs
und classes
Sie erstellen?C# Gleichheitsprüfung
1) Ist die "voll" Gleichheitsprüfung, dass viel von Standardcode (wie override Equals
, override GetHashCode
, generische Equals
, operator==
, operator!=
)?
2) Spezifizieren Sie explizit, dass Ihre Klassen die IEquatable<T>
Schnittstelle modellieren?
3) Habe ich das richtig verstanden, dass es keine tatsächliche Art und Weise ist Equals
überschreibt automatisch anwenden, wenn ich so etwas wie a == b
aufrufen, und ich habe immer sowohl die Equals
und operator==
Mitglieder zu implementieren?
^^ Ihr jeden Beitrag vermeiden ist ein C# Lernkapitel .. :) – Dienekes
2 kleinere Vorschläge für den zweiten Codeblock: 1) Solltest du '(object) left == (object) right' nicht' '' '' 'generic' 'Equals'' verschieben? Das gibt also die Geschwindigkeit (natürlich hängt es davon ab, aber unter Annahme des schlimmsten Falls), die Referenzgleichheit sogar für die generische Equals-Methode zu überprüfen. 2) Sie brauchen nicht den zweiten Null-Check '(Objekt) rechts == null' in' == 'wie Sie das im generischen' Equals' tun. Siehe meinen Beitrag. – nawfal
@Nawfal: Ich denke nicht, dass es viel Sinn macht, es im generischen 'Equals'-Fall zu tun - es wird sowieso schnell in den Fällen sein, in denen es * wahr ist, und für die Fälle, in denen es gilt * ist nicht * wahr, es fügt einen zusätzlichen Scheck ohne Nutzen hinzu. Was den Nullteil betrifft - das würde die dynamische Typprüfung erneut erfordern. Ja, Sie könnten für beide argumentieren - aber ich bin glücklich genug mit dem, was ich vor zwei Jahren geschrieben habe ... –