! (Reference ()) vs! = In Entity Framework 4
-
27-09-2019 - |
Frage
Es sei denn, eine Klasse speziell überschreibt das Verhalten für Objekt definiert, Reference und == das gleiche tun ... vergleichen Referenzen.
In der Schaden-Setter, ich habe das Muster häufig verwendete
private MyType myProperty;
public MyType MyProperty
{
set
{
if (myProperty != value)
{
myProperty = value;
// Do stuff like NotifyPropertyChanged
}
}
}
im Code jedoch erzeugt durch Entity Framework, die if
Anweisung wird ersetzt durch
if (!ReferenceEquals(myProperty, value))
Reference Verwendung ist expliziter (wie ich nicht alle C # Programmierer erraten wissen, dass == das Gleiche tut, wenn nicht außer Kraft gesetzt).
Gibt es einen Unterschied, der mir zwischen den beiden ist entkommen if-Varianten? Sind sie vielleicht die Möglichkeit entfallen, dass POCO Designer überschriebene ==
haben?
Kurz gesagt, wenn ich nicht außer Kraft gesetzt ==
haben, bin ich sparen mit! = Statt ReferenceEquals()
?
Lösung
Hier sind die unterschiedliche Semantik:
-
ReferenceEquals()
muss verwendet werden, wenn Sie meinen, dass die Objekte genau gleich sind (Identitätsprüfung). -
object.Equals()
wird verwendet, wenn Sie die Objekte bedeuten den gleichen Wert haben (Gleichheitsprüfung) -
==()
dürfen nur für unveränderliche Typen verwendet werden. Benutzen Sie diese dann auf Test auf Gleichheit.
Natürlich sind die inversed Pendants sind entsprechend gemeint.
Andere Tipps
== sollte testen, um zu sehen, ob die Referenzpunkte auf die gleiche Stelle während Reference Tests, um zu sehen, ob sie die gleichen Daten
enthalten