! (ReferenceEquals ()) vs! = in Entity Framework 4
-
27-09-2019 - |
Domanda
A meno che una classe sostituisce specificamente il comportamento definito per oggetto, ReferenceEquals e == fare la stessa cosa ... riferimenti confrontare.
In setter di proprietà, ho comunemente usato il modello
private MyType myProperty;
public MyType MyProperty
{
set
{
if (myProperty != value)
{
myProperty = value;
// Do stuff like NotifyPropertyChanged
}
}
}
Tuttavia, nel codice generato da Entity Framework, la dichiarazione if
è sostituito dal
if (!ReferenceEquals(myProperty, value))
Utilizzando ReferenceEquals è più esplicito (come credo che non tutti i programmatori C # sanno che == fa la stessa cosa, se non ignorata).
C'è qualche differenza che mi sta sfuggendo tra le due se-varianti? Sono forse la contabilità per la possibilità che i progettisti possono avere POCO ==
override?
In breve, se ho ==
non override, sono io salvare utilizzando! = Anziché ReferenceEquals()
?
Soluzione
Ecco le diverse semantiche:
-
ReferenceEquals()
deve essere utilizzato se si intende che gli oggetti sono esattamente gli stessi (controllo di identità). -
object.Equals()
deve essere utilizzato se si intendono gli oggetti hanno lo stesso valore (controllo di uguaglianza) -
==()
deve essere utilizzata solo per i tipi immutabili. Quindi utilizzarlo per prova per l'uguaglianza.
Naturalmente le controparti Inversed hanno lo scopo di conseguenza.
Altri suggerimenti
== dovrebbe verificare se i punti di riferimento nella stessa posizione mentre i test ReferenceEquals per vedere se contengono gli stessi dati