Question

Sauf si une classe remplace spécifiquement le comportement défini pour objet, ReferenceEquals et == faire la même chose ... des références comparer.

Dans setters de propriété, je l'ai couramment utilisé le modèle

private MyType myProperty;

public MyType MyProperty
{
    set
    {
        if (myProperty != value)
        {
            myProperty = value;
            // Do stuff like NotifyPropertyChanged
        }
    }
}

Cependant, dans le code généré par Entity Framework, la déclaration de if est remplacé par

    if (!ReferenceEquals(myProperty, value))

Utilisation ReferenceEquals est plus explicite (comme je suppose que tous les programmeurs C # savent que == fait la même chose en cas de remplacement).

Y at-il une différence qui me échappe entre les deux si-variantes? Sont-ils la comptabilité peut-être la possibilité que les concepteurs POCO peuvent avoir surchargée ==?

En bref, si je n'ai pas surchargée ==, suis-je enregistrer à l'aide! = Au lieu de ReferenceEquals()?

Était-ce utile?

La solution

Voici les différentes sémantiques:

  • ReferenceEquals() doit être utilisé si vous voulez dire que les objets sont exactement les mêmes (contrôle d'identité).
  • object.Equals() doit être utilisé si vous voulez dire les objets ont la même valeur (vérification de l'égalité)
  • ==() ne doit être utilisé pour les types immuables. Ensuite l'utiliser pour tester l'égalité.

Bien sûr, les homologues Inversed sont destinés en conséquence.

Voici un résumé

Autres conseils

== devrait tester pour voir si les points de référence au même endroit alors que les tests de ReferenceEquals pour voir si elles contiennent les mêmes données

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top