!(ReferenceEquals())vs!=在实体框架4中

Eri*_* J. 3 .net c# inequality entity-framework-4

除非一个类专门覆盖为Object定义的行为,否则ReferenceEquals和==做同样的事情 ......比较引用.

在属性设置器中,我经常使用该模式

private MyType myProperty;

public MyType MyProperty
{
    set
    {
        if (myProperty != value)
        {
            myProperty = value;
            // Do stuff like NotifyPropertyChanged
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

但是,在Entity Framework生成的代码中,该if语句将替换为

    if (!ReferenceEquals(myProperty, value))
Run Code Online (Sandbox Code Playgroud)

使用ReferenceEquals更明确(因为我猜不是所有的C#程序员都知道如果没有覆盖,= =会做同样的事情).

在两个if-variants之间有什么区别让我逃脱?他们是否可能考虑到POCO设计师可能已经超越的可能性==

简而言之,如果我没有覆盖==,我是否使用!=而不是ReferenceEquals()

jde*_*aan 5

以下是不同的语义:

  • ReferenceEquals() 必须使用,如果你的意思是对象完全相同(身份检查).
  • object.Equals() 如果您的意思是对象具有相同的值(等式检查),则应使用
  • ==()只能用于不可变类型.然后用它来测试相等性.

当然,倒置的对应物也是相应的.

这是一个总结