我有两个相同类型的对象,我想遍历每个对象的公共属性,并提醒用户哪些属性不匹配。
是否可以在不知道对象包含哪些属性的情况下执行此操作?
是的,通过反思- 假设每种属性类型都Equals正确实现。一种替代方法是ReflectiveEquals对除某些已知类型以外的所有类型进行递归使用,但这很棘手。
Equals
ReflectiveEquals
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; }