In principle, there ought to be a correlation between the implementation of `Equals` and `GetHashCode`, but since this particular `Equals` is so dynamic in its definition, it's probably safer to return a constant (such as 0).

Since a hash code is essentially a lossy condensation of a value, the BCL knows that sometimes two different object can have the same hash code. Basically, many collection implementations in the BCL start by getting the hash codes of two objects. If these hash codes are different, it assumes that they are different, so it never bothers invoking `Equals`. OTOH, if two hash codes are equal, it can't assume that they're equal, so it'll invoke `Equals` to be certain.

Thus, it's safer (but less efficient) to return a constant.