C# 当布尔值相同时,将其与布尔值进行比较,结果为false

C# 当布尔值相同时,将其与布尔值进行比较,结果为false,c#,entity-framework,C#,Entity Framework,我正在尝试使用EntityFrameworkCore2.0实现一个审计表。但是,将保存所有字段,而不仅仅是已编辑的字段。我想我可以做一个简单的if语句。如果旧值不等于新值,则该值已更改 然而,这对布尔人不起作用。两个真正的布尔人被证明是不平等的 下面是我非常简单的代码: if (property.OriginalValue != property.CurrentValue) {

我正在尝试使用EntityFrameworkCore2.0实现一个审计表。但是,将保存所有字段,而不仅仅是已编辑的字段。我想我可以做一个简单的if语句。如果旧值不等于新值,则该值已更改

然而,这对布尔人不起作用。两个真正的布尔人被证明是不平等的

下面是我非常简单的代码:

                        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由于某些原因总是正确的,即使它们没有被修改,这就是为什么我不能这样做。