Страницы

Поиск по вопросам

четверг, 2 мая 2019 г.

Как создать коллекцию из своих объектов и переопределить метод сравнивания?

В общем, есть класс Obj, нужно создать коллекцию объектов Obj и переопределить метод сравнивания объектов. Ибо могут добавляться дубликаты и сравнивать надо по конкретными атрибутами (atr1, atr2), а не по всем. (желательно) P.S. пока что пользовался Obj[] array, но нужно решить проблему дубликатов. (да, в гугле все есть)


Ответ

Здесь подойдет коллекция HashSet, которой в конструктор можно передать IEqualityComparer в котором можно определить правила сравнения объектов нужного типа.
Пример реализации IEqualityComparer из MSDN
class BoxEqualityComparer : IEqualityComparer { public bool Equals(Box b1, Box b2) { if (b2 == null && b1 == null) return true; else if (b1 == null | b2 == null) return false; else if(b1.Height == b2.Height & b1.Length == b2.Length & b1.Width == b2.Width) return true; else return false; }
public int GetHashCode(Box bx) { int hCode = bx.Height ^ bx.Length ^ bx.Width; return hCode.GetHashCode(); } }
И при создании коллекции:
var hashSet = new HashSet(new BoxEqualityComparer());
Теперь при добавлении в эту коллекцию объекта типа Box дубликат не добавится.

Комментариев нет:

Отправить комментарий