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);
}
}
}