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

Смысловое равенство объектов в C#

Метод Equals принимает object? и возвращает bool. В переопределении сначала проверяют тип, затем сравнивают поля.

Для того же правила нужен согласованный хеш-код: если два объекта равны по смыслу, числа из GetHashCode должны совпадать. Иначе тип ведет себя некорректно в наборах и словарях.

Запишем класс Box с полем Value:

class Box { public int Value; public override bool Equals(object? obj) { if (obj is not Box other) { return false; } return Value == other.Value; } public override int GetHashCode() { return Value.GetHashCode(); } }

Создадим две коробки с одинаковым значением и сравним их:

var left = new Box { Value = 7 }; var right = new Box { Value = 7 }; Console.WriteLine(left.Equals(right)); Console.WriteLine(left.GetHashCode() == right.GetHashCode());

Сделайте класс Label с полем Text. Два объекта с текстом "ok" должны считаться равными и давать одинаковый хеш-код. Выведите ответ сравнения и совпадение хеш-кодов.

Создайте два Label с текстами "a" и "b". Выведите, равны ли они по вашему правилу.

← →
↑
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить