Начиная с версии 15.6.7, Visual Studio 2017 для следующего класса:
class Contact
{
public int Id { get; set; }
public string Name { get; set; }
}
генерирует этот GetHashCode
метод (цифры различаются):
public override int GetHashCode()
{
var hashCode = 1460282102;
hashCode = hashCode * -1521134295 + Id.GetHashCode();
hashCode = hashCode * -1521134295 + EqualityComparer<string>.Default.GetHashCode(Name);
return hashCode;
}
Почему строковый хэш извлекается с использованием EqualityComparer<>
, а не просто путем вызова String.GetHashCode()
метода экземпляра? Это просто из-за нулевой проверки, выполняемой компаратором по умолчанию?
Мне кажется, что использование компаратора равенства - это накладные расходы.