! (ReferenceEquals ()) vs! = dans Entity Framework 4
-
27-09-2019 - |
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()
?
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.
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