重複の可能性:
Equals メソッドをオーバーライドするときに、== および != 演算子をオーバーライドする必要がありますか? (。ネット)
C# コンパイラは、== をオーバーライドする場合は equals をオーバーライドするように求めます。理由を知りたいだけですか?
重複の可能性:
Equals メソッドをオーバーライドするときに、== および != 演算子をオーバーライドする必要がありますか? (。ネット)
C# コンパイラは、== をオーバーライドする場合は equals をオーバーライドするように求めます。理由を知りたいだけですか?
==
を介して等価性を再定義している場合、が と非常に異なることを行うと非常に混乱し、コンパイル時に型がわからない場合は のみが使用可能になるため、フォールバックする必要があります。結果として、定義とは、 、、および を定義し、場合によっては を実装することを意味します。==
.Equals
.Equals
.Equals
==
==
!=
Equals
GetHashCode
IEquatable<T>
T
そうしないと、意味的に類似した 2 つの操作が異なる結果をもたらす可能性があり、多くの混乱を招くからです。
コンパイラが停止するのか、それとも単なる警告なのかはわかりませんが、どちらの場合でも、通常は同じように動作することを確認することをお勧めします。
double.NaN == double.NaN
vsでこんなものがありますdouble.NaN.Equals(double.NaN)
。
そうしないと、比較の方法に応じて異なる結果が得られるためです。
実行するとx == y
、実行とは異なる結果が得られる可能性がありますy == x
(x
およびy
が異なるタイプの場合)。リストで値を検索したり、辞書でキーとして使用したりするなど、他の比較では==
演算子が使用されないため、まったく機能しません。