static void Main(string[] args) { Console.WriteLine(StaticPropertyTypeRecursiveEquality <string> .Equals( "foo", "bar")); Console.WriteLine(StaticPropertyTypeRecursiveEquality <Foo> .Equals( new Foo() { A = 1, B = 2 }, new Foo() { A = 1, B = 2 })); Console.WriteLine(StaticPropertyTypeRecursiveEquality <Loop> .Equals( new Loop() { A = 1, B = new Loop() { A = 3 } }, new Loop() { A = 1, B = new Loop() { A = 3 } })); Console.ReadLine(); }
private static Func <T, T, bool> MakePropertyGetter <TProperty>( Expression <Func <T, TProperty> > getValueExpression) { var getValue = getValueExpression.Compile(); return((t1, t2) => { return StaticPropertyTypeRecursiveEquality <TProperty> .Equals(getValue(t1), getValue(t2)); }); }