Поделиться через


Создание переопределения методов Equals и GetHashCode в Visual Studio

Эта генерация кода применяется для:

  • C#

Что: Позволяет создавать методы Equals и GetHashCode .

Когда: Создайте эти переопределения при наличии типа, который следует сравнить с одним или несколькими полями, а не по расположению объекта в памяти.

Почему:

  • Если вы реализуете тип значения, следует переопределить метод Equals . При этом можно повысить производительность по умолчанию метода Equals в ValueType.

  • Если вы реализуете ссылочный тип, рекомендуется переопределить метод Equals , если тип выглядит как базовый тип, например Point, String, BigNumber и т. д.

  • Переопределите метод GetHashCode , чтобы разрешить тип работать правильно в хэш-таблице. Дополнительные рекомендации по операторам равенства.

Инструкция

  1. Поместите курсор в строку объявления типа.

    public class ImaginaryNumber
    {
        public double RealNumber { get; set; }
        public double ImaginaryUnit { get; set; }
    }
    

    Код должен выглядеть следующим образом:

    Снимок экрана: выделенный код, на котором применяется созданный метод

    Подсказка

    Не дважды щелкните имя типа, а параметр меню не будет доступен. Просто поместите курсор в строку.

  2. Затем выберите одно из следующих действий:

    • Нажмите клавишу Ctrl+, чтобы открыть меню Быстрые действия и рефакторинги.

    • Щелкните правой кнопкой мыши и выберите меню «Быстрые действия и рефакторинг».

    • Щелкните снимок экрана: значок , который отображается в левом поле.

  3. В раскрывающемся меню выберите "Создать равные( объект) или "Создать равно" и GetHashCode.

    Снимок экрана: раскрывающееся меню

  4. В диалоговом окне "Выбор элементов" выберите элементы, для которого нужно создать методы:

    Диалоговое окно создания переопределения

    Подсказка

    Вы также можете создать операторы из этого диалогового окна с помощью флажка в нижней части диалогового окна.

    Equals Методы GetHashCode создаются с помощью реализаций по умолчанию, как показано в следующем коде:

    public class ImaginaryNumber : IEquatable<ImaginaryNumber>
    {
        public double RealNumber { get; set; }
        public double ImaginaryUnit { get; set; }
    
        public override bool Equals(object obj)
        {
            return Equals(obj as ImaginaryNumber);
        }
    
        public bool Equals(ImaginaryNumber other)
        {
            return other != null &&
                   RealNumber == other.RealNumber &&
                   ImaginaryUnit == other.ImaginaryUnit;
        }
    
        public override int GetHashCode()
        {
            return HashCode.Combine(RealNumber, ImaginaryUnit);
        }
    }
    

    Код должен выглядеть следующим образом:

    Снимок экрана: результат созданного метода

См. также