Kein CTS-Typ macht das, soweit ich weiß. Gute Beispiele sind Dezimal und DateTime , die beide nur die Gleichheit für ihre jeweiligen Typen und nicht für ihre Basistypen oder Schnittstellen implementieren.
Außerdem kann diese Implementierung dazu führen, dass praktisch jeder Typ mit Ihrer Struktur verglichen wird, sogar anderen Strukturen, und jemand, der Ihren Code in Zukunft verwenden könnte, könnte meinen MyType mit MyOtherType könnte sinnvoll sein, während es nur den anderen Typ boxen und dann falsch zurückgeben würde. Auch interpretiert man normalerweise ==
auf object
als Referenzgleichheit.
Darüber hinaus sollten Sie die Operatoren op_Equality und op_Inequality überladen. Dies stellt sicher, dass alle Tests auf Gleichheit konsistente Ergebnisse liefern.
Die Dokumentation gibt nicht an, welche Gleichheitsoperatoren Sie verwenden sollte überladen, und der zweite Satz kann tatsächlich in den Begriffen von MyType == object
im Einklang mit MyType.Equals(object)
interpretiert werden. Die Tatsache, dass keine .NET-Typen dies tatsächlich tun und es zu Verwirrung führt, reicht jedoch aus, um zu sagen, dass dies keine gute Vorgehensweise ist.
Wenn andere Typen als MyType behandelt werden können, überladen Sie die explizite oder implizite Umwandlung.
Tags und Links c#