Объекты в HashSet и Dictionary в C#
HashSet<T> хранит уникальные элементы
по правилам сравнения и хеш-кода.
Dictionary<TKey, TValue> ищет ключ
тем же способом.
Если у типа осталось ссылочное сравнение
по умолчанию, в набор попадут две разные ссылки
с одинаковыми полями. У Tag равенство
уже настроено по полю Code.
Положим два равных тега в HashSet:
var set = new HashSet<Tag>();
set.Add(new Tag { Code = 3 });
set.Add(new Tag { Code = 3 });
Console.WriteLine(set.Count);
class Tag
{
public int Code;
public override bool Equals(object? obj)
{
if (obj is not Tag other)
{
return false;
}
return Code == other.Code;
}
public override int GetHashCode()
{
return Code.GetHashCode();
}
}
В словаре ключ того же типа ведет себя аналогично. Создадим карту с одним ключом и прочитаем значение по другому ключу с тем же кодом:
var map = new Dictionary<Tag, string>();
var key = new Tag { Code = 5 };
map[key] = "alpha";
var lookup = new Tag { Code = 5 };
Console.WriteLine(map[lookup]);
Сделайте класс Sku с полем Code
и смысловым равенством по этому полю.
Добавьте в набор уникальных значений два объекта
с кодом 10 и выведите, сколько элементов
там осталось.
Создайте словарь, где ключ - Sku,
а значение - количество.
Положите товар с кодом 10 и количеством 4.
Прочитайте количество по другому ключу
с тем же кодом и выведите число.