Just used the Generate Equals and GetHashCode feature for the first time
today... very cool! But one problem: the code for Equals doesn't allow symmetry
with derived types. For an implementation of bool Equals (obj) in a class
A, the book Effective C# mentions the problem of having a class B derived
from A. Then, if we have variables a and b, of types A and B, a.Equals(b)
could be true while b.Equals(a) is false. In Equals, you have to first ensure
that obj is the correct type before casting it.