Создаем портфолио за 1 месяц
К концу месяца: 4 классных проекта в вашем портфолио! Стоимость: 100$. Подробности...
1101 of 1492 menu
◀ ▶

Операторы равенства

Перегрузки operator == и operator != объявляют парой. Вместе с ними переопределяют Equals и GetHashCode - иначе сравнение и хеш-код разойдутся. Для ссылочных типов в operator == обычно проверяют null.

Синтаксис

public static bool operator ==(Тип left, Тип right) public static bool operator !=(Тип left, Тип right) public override bool Equals(object obj) public override int GetHashCode()

Пример

Давайте сравним два объекта с одинаковым полем:

using System; class Code { public int Value; public static bool operator ==(Code left, Code right) { if (ReferenceEquals(left, right)) { return true; } if (left is null || right is null) { return false; } return left.Value == right.Value; } public static bool operator !=(Code left, Code right) { return !(left == right); } public override bool Equals(object obj) { return obj is Code other && this == other; } public override int GetHashCode() { return Value.GetHashCode(); } } class Program { static void Main() { var first = new Code { Value = 5 }; var second = new Code { Value = 5 }; Console.WriteLine(first == second); } }

Результат выполнения кода:

True

Пример

Давайте проверим неравенство через operator !=:

using System; class Code { public int Value; public static bool operator ==(Code left, Code right) { if (ReferenceEquals(left, right)) { return true; } if (left is null || right is null) { return false; } return left.Value == right.Value; } public static bool operator !=(Code left, Code right) { return !(left == right); } public override bool Equals(object obj) { return obj is Code other && this == other; } public override int GetHashCode() { return Value.GetHashCode(); } } class Program { static void Main() { var first = new Code { Value = 1 }; var second = new Code { Value = 2 }; Console.WriteLine(first != second); } }

Результат выполнения кода:

True

Пример

Давайте сравним равенство полей в структуре:

using System; struct Cell { public int Id; public static bool operator ==(Cell left, Cell right) { return left.Id == right.Id; } public static bool operator !=(Cell left, Cell right) { return !(left == right); } public override bool Equals(object obj) { return obj is Cell other && this == other; } public override int GetHashCode() { return Id.GetHashCode(); } } class Program { static void Main() { var first = new Cell { Id = 3 }; var second = new Cell { Id = 3 }; Console.WriteLine(first.Equals(second)); } }

Результат выполнения кода:

True

Смотрите также

  • операторы < и >,
    которые задают порядок сравнения
  • метод Equals,
    который переопределяют вместе с ==
  • метод GetHashCode,
    который согласуют с равенством
  • ключевое слово record,
    где равенство полей генерируется автоматически
← →
↑
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить