C# 当布尔值相同时,将其与布尔值进行比较,结果为false
我正在尝试使用EntityFrameworkCore2.0实现一个审计表。但是,将保存所有字段,而不仅仅是已编辑的字段。我想我可以做一个简单的if语句。如果旧值不等于新值,则该值已更改 然而,这对布尔人不起作用。两个真正的布尔人被证明是不平等的 下面是我非常简单的代码:C# 当布尔值相同时,将其与布尔值进行比较,结果为false,c#,entity-framework,C#,Entity Framework,我正在尝试使用EntityFrameworkCore2.0实现一个审计表。但是,将保存所有字段,而不仅仅是已编辑的字段。我想我可以做一个简单的if语句。如果旧值不等于新值,则该值已更改 然而,这对布尔人不起作用。两个真正的布尔人被证明是不平等的 下面是我非常简单的代码: if (property.OriginalValue != property.CurrentValue) {
if (property.OriginalValue != property.CurrentValue)
{
auditEntry.OldValues[propertyName] = property.OriginalValue;
auditEntry.NewValues[propertyName] = property.CurrentValue;
}
希望您能在图像中看到
OldValues
和NewValues
都是真的,但它会在不应该的时候被放入if
语句中。如果可能的话,我想要一个比较字符串、整数、布尔值等的if
语句。与property.OriginalValue和property.CurrentValue是两个对象这一事实有关。因为2不引用同一个对象,所以它们永远不相等。尝试使用.ToString()或类似以下内容进行比较:property.IsModified使用以下行修复它:
if (((property.OriginalValue != null) ? property.OriginalValue.ToString() : "" ) != ((property.CurrentValue != null) ? property.CurrentValue.ToString() : ""))
您能否在调试器中向我们展示在执行
if
语句时这两个值被设置为什么?property.OriginalValue的值是什么<代码>属性.OriginalValue.GetType<代码>属性。当前值<代码>属性.CurrentValue.GetType?不要猜测,请调试并检查。@mjwills猜测它们是具有bool类型的对象(请参阅编辑文章中的新图像)。这就是我的问题的原因。property.IsModified由于某些原因总是正确的,即使它们没有被修改,这就是为什么我不能这样做。