获取以下代码片段...此代码采用两个对象 - 原始对象和具有可能已更改的某些属性的同一对象 - 并循环遍历每个属性,返回所有已更改属性的列表及其旧值和新值
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,但它不会。
任何见解?
答案 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);
}
}