Compare two objects' properties to find differences?
.net, c#
Solution
Yes, with reflection - assuming each property type implements `Equals` appropriately. An alternative would be to use `ReflectiveEquals` recursively for all but some known types, but that gets tricky.
public bool ReflectiveEquals(object first, object second)
{
if (first == null && second == null)
{
return true;
}
if (first == null || second == null)
{
return false;
}
Type firstType = first.GetType();
if (second.GetType() != firstType)
{
return false; // Or throw an exception
}
// This will only use public properties. Is that enough?
foreach (PropertyInfo propertyInfo in firstType.GetProperties())
{
if (propertyInfo.CanRead)
{
object firstValue = propertyInfo.GetValue(first, null);
object secondValue = propertyInfo.GetValue(second, null);
if (!object.Equals(firstValue, secondValue))
{
return false;
}
}
}
return true;
}
Problem
I have two objects of the same type, and I want to loop through the public properties on each of them and alert the user about which properties don't match. Is it possible to do this without knowing what properties the object contains?