PropertyInfo.无法比较日期时间
本文关键字:日期 时间 比较 PropertyInfo | 更新日期: 2023-09-27 18:16:26
我正在遍历两个对象,以查看两个对象中的所有项是否相同。在返回false的地方添加一个表之后,我看到了相同的值。比较的两个项都是datetime。它们具有完全相同的值,但返回false。我的问题是考虑到这两个项目都是日期时间,是它们引起的问题吗?如果不是,有没有更好的方法来比较我的两个对象?
private bool CompareObj(Visit object1, Visit object2)
{
foreach (var obj1PropertyInfo in object1.GetType().GetProperties())
{
foreach (var obj2PropertyInfo in object2.GetType().GetProperties())
{
if (obj1PropertyInfo.Name == obj2PropertyInfo.Name && obj1PropertyInfo.GetValue(object1, null) != obj2PropertyInfo.GetValue(object2, null))
{
return false;
}
}
}
return true;
}
这是一个链接:
return object1
.GetType()
.GetProperties()
.All(x => object.Equals(x.GetValue(object1), x.GetValue(object2));
使用Equals(也适用于null)
private bool CompareObj(Visit object1, Visit object2)
{
foreach (var obj1PropertyInfo in object1.GetType().GetProperties())
{
foreach (var obj2PropertyInfo in object2.GetType().GetProperties())
{
if (obj1PropertyInfo.Name == obj2PropertyInfo.Name
&& !Equals(obj1PropertyInfo.GetValue(object1, null),
obj2PropertyInfo.GetValue(object2, null)))
{
return false;
}
}
}
return true;
}
感谢Michael Lieu首先提出这个建议,但由于他没有提出,我将把它放在回答形式中。
如果您只对对象相等感兴趣(而不是对象是否共享相同的引用),请使用.Equals
方法。默认情况下(即,假设它没有重载),==
比较引用,(假设)在您的情况下是相同的,因为这是DateTime
的两个不同实例。
这都是在你比较2个DateTime
实例的假设下,当然:private bool CompareObj(访问object1,访问object2){返回对象。=(中的object1、object2);}
如果比较更复杂的对象,可能需要使用带有反射的循环来遍历属性。
总结:如果你只对相等感兴趣,但你不在乎引用是否相同,请使用Equals
而不是==
。