Как (x, y) .GetHashCode () работает за кулисами? - PullRequest
1 голос
/ 05 апреля 2019
public class Lemon{
   public int Ounces;
   public string Color;

   public override int GetHashCode() => (Ounces, Color).GetHashCode();
}

Мне интересно, как это работает. (Ounces, Color) похож на анонимный тип, но не использует тот же синтаксис. И если бы это был анонимный тип, я все еще не уверен, как он узнает, как получить уникальный хеш.

Было бы здорово получить ссылку на соответствующий исходный код .net. Это трудно раскрыть, так как я не уверен, к какому типу (Ounces, Color) в конечном итоге будет компилироваться.

1 Ответ

8 голосов
/ 05 апреля 2019

(Ounces, Color) - это кортеж, который был представлен в C # 7. Соответствующий тип - ValueTuple<T1, T2>.Из справочного источника вы можете сказать, что GetHashCode() вычисляет хеш-код путем объединения хеш-кодов каждого объекта (и дополнительного случайного начального числа) с использованием

 public static int Combine(int h1, int h2)
 {
     uint rol5 = ((uint)h1 << 5) | ((uint)h1 >> 27);
     return ((int)rol5 + h1) ^ h2;
 }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...