比较反射类型返回False

时间:2015-04-09 00:25:25

标签: c#

获取以下代码片段...此代码采用两个对象 - 原始对象和具有可能已更改的某些属性的同一对象 - 并循环遍历每个属性,返回所有已更改属性的列表及其旧值和新值

    foreach (PropertyInfo property in newProperties)
    {
        PropertyInfo origProperty = origProperties.Where(p => p.Name == property.Name).Single();
        object originalValue = origProperty.GetValue(original);
        object newValue = property.GetValue(updated);

        // This line always evaluates to true
        if (Convert.ChangeType(originalValue, origProperty.PropertyType) != Convert.ChangeType(newValue, property.PropertyType))
        {
            dynamic modification = new ExpandoObject();
            modification.Property = property.Name;
            modification.OldValue = originalValue;
            modification.NewValue = newValue;
            modifications.Add(modification);
        }
    }

上面的行始终评估为true。我也尝试过:

    if (originalValue != newValue)

但这也总是评估为真。

例如,在“局部”窗口中,它显示两个属性{Int32 Id}和两者的值为11.因此,条件应评估为False,但它不会。

任何见解?

1 个答案:

答案 0 :(得分:0)

使用Equals方法。

foreach (PropertyInfo property in newProperties)
{
    PropertyInfo origProperty = origProperties.Where(p => p.Name == property.Name).Single();
    object originalValue = origProperty.GetValue(original);
    object newValue = property.GetValue(updated);

    // This line always evaluates to true
    if (!originalValue.Equals(newValue))
    {
        dynamic modification = new ExpandoObject();
        modification.Property = property.Name;
        modification.OldValue = originalValue;
        modification.NewValue = newValue;
        modifications.Add(modification);
    }
}