public static void Main()
Console.WriteLine("Hello World");
var A = new ComplexDto(){ DateFrom = DateTime.Now };
var B = new ComplexDto(){ DateFrom = A.DateFrom };
var C = new ComplexDto(){ DateFrom = DateTime.Now };
Console.WriteLine(A.IsEqualGeneric(B));
Console.WriteLine(C.IsEqualGeneric(B));
Console.WriteLine(A.IsEqualGeneric(C));
public DateTime DateFrom { get; set; }
public DateTime DateTo { get; set; }
public static class ComplexDtoExtensions
public static bool IsEqual(this ComplexDto obj, ComplexDto other)
return obj.DateFrom == other.DateFrom && obj.DateTo == other.DateTo;
public static bool IsEqualGeneric<T>(this T obj, T other)
var pis = typeof(T).GetProperties();
if(!pi.GetType().IsClass && !pi.GetValue(obj).Equals(pi.GetValue(other)))
if(pi.GetType().IsClass && !pi.GetValue(obj).IsEqualGeneric(pi.GetValue(other)))