除非一个类专门覆盖了为 Object 定义的行为,ReferenceEquals 和 == 做同样的事情……比较引用。
在属性设置器中,我常用的模式
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()
?