「.NETのクラスライブラリ設計」て本読んでみな。
値型はimmutableであるべき
参照型でGetHashCodeとEqualsをオーバーライドする場合はimmutableであるべき
みんな書いてあるから。
もちろん必須ではないけど、間違いなくそうするべきといわれてる。