当传入空值时,. equals()的替代方法

本文关键字:方法 equals 空值 | 更新日期: 2023-09-27 18:13:15

所以我有这个方法,它检查属性是否已经改变,但是当一个空值被传递进去时,它会因为对象引用没有设置为实例错误而失败。equals方法。

public bool HasPropertyChanged(string property, object newValue) {
    bool result = false;
    PropertyInfo propertyInfo = Entity.GetType().GetProperty(property);
    if (!newValue.Equals(propertyInfo.GetValue(Entity, null))) {
        result = true;
    }
    return result;      
}

这是我提出的解决方案的问题,但我希望做一些更干净的我使用ReferenceEquals(),但它总是返回false当一个值传递进来。任何提示/建议都会很好。

public bool HasPropertyChanged(string property, object newValue) {
    bool result = false;
    PropertyInfo propertyInfo = Entity.GetType().GetProperty(property);
    object oldValue = propertyInfo.GetValue(Entity, null);

    if (newValue != null) { 
        //check to prevent Object Reference not equal to null
        if (!newValue.Equals(oldValue)) {
            result = true;
        }
    }
    else if (oldValue != null) { 
       // If oldValue is not null then return the property has changed
        result = true;
    }
    return result;  
}

当传入空值时,. equals()的替代方法

使用对象。等于处理null对象的静态方法。

public bool HasPropertyChanged(string property, object newValue) 
{
    PropertyInfo propertyInfo = Entity.GetType().GetProperty(property);
    return !object.Equals(newValue,propertyInfo.GetValue(Entity, null));
}

如果使用实体框架,它看起来好像你可能是....试试下面的内容:

if (Entity.State == EntityState.Modified)
{
}