Краткий способ объединения полевых хеш-кодов?

Один, если способы реализации GetHashCode - где это 'необходимо сделать это - обрисовано в общих чертах Джоном СкитомВот, Повторяя его код:

public override int GetHashCode()
{
    unchecked // Overflow is fine, just wrap
    {
        int hash = 17;
        // Suitable nullity checks etc, of course :)
        hash = hash * 23 + field1.GetHashCode();
        hash = hash * 23 + field2.GetHashCode();
        hash = hash * 23 + field3.GetHashCode();
        return hash;
    }
}

Роллинг этого кода вручную может быть подвержен ошибкам, а ошибки могут быть тонкими / трудно обнаружить (вы поменялись местами+ а также* по ошибке?), может быть трудно запомнить правила комбинации для разных типов, и я неМне нравится тратить умственные усилия на написание / рецензирование одного и того же снова и снова для разных областей и классов. Это также может запутать одну из самых важных деталей (я помню, чтобы включить все поля?) В повторяющийся шум.

Есть ли краткий способ объединить хеш-коды полей с помощью библиотеки .net?, Очевидно, я мог бы написать свой, но если бы тамЧто-то идиоматическое / встроенное ЯЯ предпочел бы это.

Как пример, в Java (с использованием JDK7) я могу достичь вышеупомянутого, используя:

   @Override
   public int hashCode()  
   {  
      return Objects.hash(field1, field2, field3);  
   }  

Это действительно помогает устранить ошибки и сосредоточиться на важных деталях.

Мотивация: я наткнулся на класс C #, который требует переопределенияGetHashCode(), но способ, которым он объединил хэш-коды своих различных составляющих, имел некоторые серьезные ошибки. Библиотечная функция для объединения хеш-кодов была бы полезна для избежания таких ошибок.

Ответы на вопрос(5)

Ваш ответ на вопрос