Если класс специально не переопределяет поведение, определенное для 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()
?