【发布时间】:2020-09-01 13:34:38
【问题描述】:
我需要检查对象(不是所有属性),对于原始类型,一切正常,但对于对象类型,方法 Object.Equals(object a, object b) 返回错误的结果。
public static bool IsModified<T>(T newProp, T oldProp) where T : class
{
List<string> IgnoreProps = new List<string> { "UpdatedOn", "UpdatedById", "UpdatedBy", "RowVersion" };
Type type = typeof(T);
foreach(PropertyInfo prop in type.GetProperties())
{
if (IgnoreProps.Contains(prop.Name))
{
continue;
}
var propType = prop.PropertyType;
var newValue = prop.GetValue(newProp);
var oldValue = prop.GetValue(oldProp);
newValue = Convert.ChangeType(newValue, propType);
oldValue = Convert.ChangeType(oldValue, propType);
var a = Equals(newValue, oldValue); // return incorrect value
if (!Equals(newValue, oldValue))
{
return true;
}
}
return false;
}
第一个对象
第二个对象
【问题讨论】:
-
不要将相关信息作为图像添加到问题中,请将值添加为文本。你的类型是否也覆盖了
Equals方法?
标签: c# object reflection compare system.reflection