Это действительно зависит от варианта использования.
Вы часто используете хэш? Затем создайте его заранее, поскольку объект является неизменным, поэтому каждый раз вычислять его не нужно, поскольку результат всегда один и тот же.
Разве хэш не используется часто? Тогда не создавайте его заранее, так как это излишне замедлит программу, вычисляя хеш, который, вероятно, не будет использоваться.
Третий (и, на мой взгляд, лучший) вариант - вычислять хеш в GetHashCode и кэшировать результат, вычисляя хэш только один раз и возвращая этот кешированный хэш каждый раз после этого. Таким образом, не тратится время на вычисление хэша, когда он никогда не используется, и при этом не вызывается излишне каждый раз, когда вызывается GetHashCode. Хотя это означает, что память используется для хранения хеша в объекте.