比较两个对象的属性以发现差异?

我有两个相同类型的对象,我想遍历每个对象的公共属性,并提醒用户哪些属性不匹配。

是否可以在不知道对象包含哪些属性的情况下执行此操作?

回答:

是的,通过反思-

假设每种属性类型都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;

}

以上是 比较两个对象的属性以发现差异? 的全部内容, 来源链接: utcz.com/qa/405070.html

回到顶部