除非一个类专门覆盖为Object定义的行为,否则ReferenceEquals and == do the same thing ...比较引用。
在属性设置器中,我通常使用该模式
private MyType myProperty;
public MyType MyProperty
{
set
{
if (myProperty != value)
{
myProperty = value;
// Do stuff like NotifyPropertyChanged
}
}
}
但是,在由Entity Framework生成的代码中,
if
语句被替换为 if (!ReferenceEquals(myProperty, value))
使用ReferenceEquals更为明确(因为我猜并不是所有C#程序员都知道==如果不被重写也会做同样的事情)。
两个if变量之间有什么区别让我无法逃脱吗?他们也许是在解释POCO设计人员可能会覆盖
==
的可能性吗?简而言之,如果我没有覆盖
==
,是否可以使用!=代替ReferenceEquals()
保存? 最佳答案
以下是不同的语义:
如果您表示对象完全相同(身份检查),则必须使用ReferenceEquals()
。
如果您表示对象具有相同的值(相等性检查),则应使用object.Equals()
==()
仅用于不可变类型。然后使用它测试是否相等。
当然,相反的意思是相应的。
Here is a summary