using Implab; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace Implab { /// /// Обертка для создания IEqualityComparer с использованием делегатов или лямда-выражений. /// /// Тип сравниваемых значений public class CustomEqualityComparer : IEqualityComparer { Func m_equals; Func m_hash; /// /// Создает новый объект с указанными функциями сравнения на раветво и получения хеш-кода. /// /// Функция проверки на равенство /// Функция получения хешкода public CustomEqualityComparer(Func equality, Func hash) { Safe.ArgumentNotNull(equality, "equality"); Safe.ArgumentNotNull(hash, "hash"); m_hash = hash; m_equals = equality; } /// /// Сравнивает два знаечния на ревенство. /// /// /// /// Результат сравнения на равенство public bool Equals(T x, T y) { return m_equals(x,y); } /// /// Получает хеш-код для указанного значения. /// /// /// Равные знаечния *должны* иметь одинаковый хеш-код. /// Хеш-код public int GetHashCode(T obj) { return m_hash(obj); } } }