Почему Visual Studio использует EqualityComparer для строки при автоматической генерации GetHashCode - PullRequest
0 голосов
/ 03 мая 2018

Начиная с версии 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() метода экземпляра? Это просто из-за нулевой проверки, выполняемой компаратором по умолчанию?

Мне кажется, что использование компаратора равенства - это накладные расходы.

...