除非一个类特别覆盖了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()
是否更安全?