! (ReferenceEquals ()) vs! = В Entity Framework 4 - PullRequest
3 голосов
/ 14 июня 2010

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

Ответы [ 2 ]

5 голосов
/ 14 июня 2010

Вот другая семантика:

  • ReferenceEquals() необходимо использовать, если вы имеете в виду, что объекты абсолютно одинаковы (проверка идентичности).
  • object.Equals() должно бытьиспользуется, если вы имеете в виду, что объекты имеют одинаковое значение (проверка на равенство)
  • ==() должны использоваться только для неизменяемых типов.Затем используйте его для проверки на равенство.

Конечно, обратные аналоги имеют в виду соответственно.

Вот краткое изложение

0 голосов
/ 14 июня 2010

== должен проверять, указывают ли ссылки на одно и то же местоположение, тогда как ReferenceEquals проверяет, содержат ли они одинаковые данные

...