Я прочитал в книге Essential С# 3.0 и .NET 3.5, что:
GetHashCode() возвращается в течение жизни конкретного объекта constant (одно и то же значение), даже если данные объектов изменяются. Во многих случаях, вы должны кэшировать метод return, чтобы обеспечить его выполнение.
Является ли это допустимым ориентиром?
Я пробовал пару встроенных типов в .NET, и они не вели себя так.