À moins qu'une classe remplace spécifiquement le comportement défini pour Object, ReferenceEquals and == do the same thing ... compare les références.! (ReferenceEquals()) vs! = Dans Entity Framework 4
En setters de propriété, j'ai souvent 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 if
est remplacé par
if (!ReferenceEquals(myProperty, value))
L'utilisation ReferenceEquals est plus explicite (comme Je suppose que tous les programmeurs C# ne savent pas que == fait la même chose si elle n'est pas surchargée).
Y a-t-il une différence qui m'échappe entre les deux if-variants? Est-ce qu'ils tiennent peut-être compte de la possibilité que les concepteurs de POCO aient surchargé ==
?
En résumé, si je n'ai pas remplacé ==
, est-ce que je sauvegarde en utilisant! = Au lieu de ReferenceEquals()
?
Pourquoi la règle d'or 'Si vous voulez savoir si deux objets se réfèrent à la même instance USE SEULEMENT ReferenceEquals'? MSDN indique 'Pour les types de référence autres que string, == renvoie true si ses deux opérandes font référence au même objet. 'Http://msdn.microsoft.com/fr-fr/library/53k8ybth.aspx Ne pas contester la règle d'or, Je veux juste le comprendre. –
Juste parce que ça fonctionne toujours. Le == pourrait être mal implémenté ce qui le rend potentiellement problématique. Il m'a sauvé la vie quand j'ai décidé de rendre mes objets immuables dans un projet, où == est dépassé pour l'égalité et non l'identité. Donc j'utilise toujours ReferenceEquals si les objets, et non les valeurs, doivent être comparés. – jdehaan