Equals und Gleichheitsoperator für Werttypen überschreiben
TypeName |
OverrideEqualsAndOperatorEqualsOnValueTypes |
CheckId |
CA1815 |
Kategorie |
Microsoft.Performance |
Unterbrechende Änderung |
NonBreaking |
Ursache
Von einem öffentlichen Werttyp wird System.Object.Equals nicht überschrieben, bzw. der Gleichheitsoperator (==) wird nicht implementiert. Diese Regel überprüft keine Enumerationen.
Regelbeschreibung
Bei Werttypen wird die Reflection-Bibliothek von der geerbten Implementierung von Equals verwendet und der Inhalt aller Felder verglichen. Reflection ist rechenintensiv, und das Überprüfen eines jeden Felds auf Gleichheit ist eventuell unnötig. Wenn Sie erwarten, dass die Benutzer Instanzen vergleichen oder sortieren bzw. dass sie die Instanzen als Schlüssel für Hashtabellen verwenden, sollte der Werttyp Equals implementieren. Wenn die Programmiersprache das Überladen von Operatoren unterstützt, sollten Sie außerdem eine Implementierung der Gleichheits- und Ungleichheitsoperatoren bereitstellen.
Behandlung von Verstößen
Um einen Verstoß gegen diese Regel zu beheben, stellen Sie eine Implementierung von Equals bereit. Implementieren Sie den Gleichheitsoperator, falls dies möglich ist.
Warnungsausschluss
Eine Warnung dieser Regel kann gefahrlos ausgeschlossen werden, wenn Instanzen des Werttyps nicht miteinander verglichen werden.
Verwandte Regeln
Equals beim Überladen des Gleichheitsoperators überschreiben
Equals überladen beim Überschreiben des Gleichheitsoperators durch einen Werttyp
Operatoren sollten symmetrische Überladungen haben