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;
}

PropertyInfo.无法比较日期时间

这是一个链接:

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而不是==