The VS2005 documentation Guidelines for Overloading Equals() and Operator == (C# Programming Guide) states in part
Overriding operator == in non-immut
Check out the Guidelines and rules for GetHashCode by Eric Lippert.
Rule: the integer returned by GetHashCode must never change while the object is contained in a data structure that depends on the hash code remaining stable
It is permissible, though dangerous, to make an object whose hash code value can mutate as the fields of the object mutate.