== Why is this an issue? ``++GetHashCode++`` is used to file an object in a ``++Dictionary++`` or ``++Hashtable++``. If ``++GetHashCode++`` uses non-``++readonly++`` fields and those fields change after the object is stored, the object immediately becomes mis-filed in the ``++Hashtable++``. Any subsequent test to see if the object is in the ``++Hashtable++`` will return a false negative. === Noncompliant code example [source,csharp] ---- public class Person { public int age; public string name; public override int GetHashCode() { int hash = 12; hash += this.age.GetHashCode(); // Noncompliant hash += this.name.GetHashCode(); // Noncompliant return hash; } ---- === Compliant solution [source,csharp] ---- public class Person { public readonly DateTime birthday; public string name; public override int GetHashCode() { int hash = 12; hash += this.birthday.GetHashCode(); return hash; } ---- ifdef::env-github,rspecator-view[] ''' == Implementation Specification (visible only on this page) === Message Refactor 'GetHashCode' to not reference mutable fields. === Highlighting * primary: method name * secondary: uses of mutable fields ** message: Remove this use of "xxx" or make it "readonly". endif::env-github,rspecator-view[]