Understanding IEquatable

前端 未结 2 966
南笙
南笙 2020-12-04 18:59

When I implement objects that I want to compare using the IEquatable interface:

  1. Why do I have to override Equals(object) method if I alre
2条回答
  •  不知归路
    2020-12-04 19:58

    1) As Ray said, override Equals(object) to ensure consistency when the method is called from classes which don't know (statically) that you implement IEquatable. For instance, the non-generic collections classes will use Equals(object) for comparisons. You should also override GetHashCode().

    2) Implementing IEquatable doesn't overload the == and != operators automatically, but there's nothing to stop you from doing so, just like System.String does. You should document this very clearly if you do, however - and be careful when you make comparisons between other types of reference (e.g. MyType and Object) which will still use the identity comparison. I suspect it's not a great idea to do this unless it's going to be a very heavily used type in your code, where everyone will become very familiar with it and where the syntactic sugar of overloading == will really make a positive impact on readability.

提交回复
热议问题