using System.Collections.Generic;
public static void Main()
var comparer = new GenericComparer<DateTime>(
(dateA, dateB) => dateA.ToString("ddMMyyyy").Equals(dateB.ToString("ddMMyyyy")),
(date) => {throw new NotImplementedException();});
Console.WriteLine(comparer.Equals(new DateTime(2019, 01, 01), new DateTime(2019, 01, 01)));
Console.WriteLine(comparer.Equals(new DateTime(2019, 01, 01), new DateTime(2019, 01, 02)));
Console.WriteLine(comparer.Equals(new DateTime(2019, 01, 01), new DateTime(2019, 02, 02)));
Console.WriteLine(comparer.Equals(new DateTime(2019, 01, 01), new DateTime(2018, 01, 02)));
public class GenericComparer<T> : IEqualityComparer<T>
private Func<T, T, bool> EqualsComparerDelegate { get; set; }
private Func<T, int> GetHashDelegate{ get; set; }
public GenericComparer(Func<T, T, bool> equalsComparer, Func<T, int> getHashDelegate) {
this.EqualsComparerDelegate = equalsComparer;
this.GetHashDelegate = getHashDelegate;
public bool Equals(T x, T y)
return this.EqualsComparerDelegate(x,y);
public int GetHashCode(T obj)
return this.GetHashDelegate(obj);