public override int GetHashCode() { if (!cachedHashCode.HasValue) { cachedHashCode = GetHashCode(this); } return cachedHashCode.Value; }