As the other answers point out, you get equality and hashing βfor free,β so you don't need to redefine them. However, you get what you pay for; by default, equality and hash implementations (1) are not particularly effective in some cases, and (2) can perform bitwise comparisons and, therefore, can do things like comparing negative zero and positive zero as different if they are logically equal.
If you expect your structure to be often used in contexts that require equality and hashing, then you should write your own implementations of both and follow the relevant rules and recommendations.
https://ericlippert.com/2011/02/28/guidelines-and-rules-for-gethashcode/
So, to answer your question: why has no one done this for a certain type? Probably because they did not believe that it was a good use of their time compared to everyone else, what they needed to do to improve the base class libraries. Most people do not compare key-value pairs for equality, so optimizing it is probably not a priority.
This, of course, is hypothesized; if you really want to find out the reason why something was not done on a certain day, you will need to track all the people who did not do this action and ask them what else they do, what was more important on that day.
source share