Подтвердить что ты не робот

Есть ли способ автоматически генерировать GetHashCode и Equals с помощью ReSharper?

В eclipse, когда я код на Java, есть функция автоматического генерации базовой, эффективной и без ошибок реализации hashCode() и equals() без потребления энергии мозга.

Есть ли аналогичная функция, встроенная в Visual Studio или в ReSharper?

4b9b3361

Ответ 1

Да, Resharper может это сделать. С помощью курсора внутри вашего типа откройте меню "Создать код" (Alt + Ins в зависимости от настроек или Resharper → Edit → Generate Code) и выберите "Члены равенства":

Generate code menu

Это открывает окно, в котором вы можете выбрать, какие члены используются для равенства, а также некоторые параметры сгенерированного кода (например, если ваш тип реализует IEquatable<T>):

Generate equality members window

Если вы начинаете с простого типа с двумя свойствами:

class Person
{
    public string FirstName { get; private set; }
    public string LastName { get; private set; }
}

Тогда сгенерированный код может выглядеть примерно так:

class Person : IEquatable<Person>
{
    public string FirstName { get; private set; }
    public string LastName { get; private set; }

    public bool Equals(Person other)
    {
        if (ReferenceEquals(null, other))
            return false;
        if (ReferenceEquals(this, other))
            return true;
        return string.Equals(FirstName, other.FirstName) && string.Equals(LastName, other.LastName);
    }

    public override bool Equals(object obj)
    {
        if (ReferenceEquals(null, obj))
            return false;
        if (ReferenceEquals(this, obj))
            return true;
        if (obj.GetType() != this.GetType())
            return false;
        return Equals((Person)obj);
    }

    public override int GetHashCode()
    {
        unchecked
        {
            return ((FirstName != null ? FirstName.GetHashCode() : 0) * 397) ^ (LastName != null ? LastName.GetHashCode() : 0);
        }
    }
}