using System; using System.Collections.Generic; namespace BusinessLogic.Classes { public class KeyBasedEqualityComparer : IEqualityComparer { private readonly Func _keyGetter; public KeyBasedEqualityComparer(Func keyGetter) { if (default(T) == null) { _keyGetter = (x) => x == null ? default : keyGetter(x); } else { _keyGetter = keyGetter; } } public bool Equals(T x, T y) { return EqualityComparer.Default.Equals(_keyGetter(x), _keyGetter(y)); } public int GetHashCode(T obj) { TKey key = _keyGetter(obj); return key == null ? 0 : key.GetHashCode(); } } public static class KeyBasedEqualityComparer { public static KeyBasedEqualityComparer Create(Func keyGetter) { return new KeyBasedEqualityComparer(keyGetter); } } }