caloggins
5/17/2013 - 3:30 PM

DynamicEquals

            private bool DynamicEquals(object obj1, object obj2)
            {
                var list1 = Impromptu.GetMemberNames(obj1);
                list1 = list1.OrderBy(m => m);
                var list2 = Impromptu.GetMemberNames(obj2);
                list2 = list2.OrderBy(m => m);

                var list = list1 as IList<string> ?? list1.ToList();
                if (!list.SequenceEqual(list2))
                    return false;

                return list.All(memberName => Impromptu.InvokeGet(obj1, memberName).Equals(Impromptu.InvokeGet(obj2, memberName)));
            }