public class DelegateEqualityComparer : IEqualityComparer { private readonly Func _equals; private readonly Func _hashCode; public DelegateEqualityComparer(Func equals, Func hashCode) { _equals = equals; _hashCode = hashCode; } public bool Equals(T x, T y) { return _equals(x, y); } public int GetHashCode(T obj) { if (_hashCode != null) return _hashCode(obj); return obj.GetHashCode(); } }