Skip to main content
1 of 3
jason
  • 242.6k
  • 35
  • 436
  • 532

This is a terrible definition of Equals because it is not transitive.

Consider

x = { Id = 1, Money = 0.1, Code = "X" } y = { Id = 1, Money = 0.2, Code = "Y" } z = { Id = 3, Money = 0.2, Code = "Z" } 

Then x == y and y == z but x != z.

Additionally, we can establish that the only reasonable implementation of GetHashCode is a constant map.

Suppose that x and y are distinct objects. Let z be the object

z = { Id = x.Id, Money = y.Money, Code = "z" } 

Then x == y and y == z so that x.GetHashCode() == z.GetHashCode() and y.GetHashCode() == z.GetHashCode() establishing that x.GetHashCode() == y.GetHashCode(). Since x and y were arbitrary we have established that GetHashCode is constant.

Therefore, you need to rethink the concept you are trying model, and come up with a different definition of Equals.

jason
  • 242.6k
  • 35
  • 436
  • 532