! (ReferenceEquals ()) vs! = en Entity Framework 4
-
27-09-2019 - |
Pregunta
A menos que una clase específica prevalece sobre el comportamiento definido para el objeto, ReferenceEquals y == hacer lo mismo ... referencias comparar.
En los emisores de propiedad, he utilizado comúnmente el patrón
private MyType myProperty;
public MyType MyProperty
{
set
{
if (myProperty != value)
{
myProperty = value;
// Do stuff like NotifyPropertyChanged
}
}
}
Sin embargo, en el código generado por el marco de la entidad, la declaración if
se sustituye por
if (!ReferenceEquals(myProperty, value))
El uso de ReferenceEquals es más explícito (como supongo que no todos los programadores de C # saben que == hace lo mismo, si no anulado).
¿Hay alguna diferencia que me está escapando entre los dos si-variantes? ¿Son quizás justificando la posibilidad de que los diseñadores pueden tener POCO ==
reemplazado?
En definitiva, si tengo ==
no anulado, estoy usando Guardar! = En lugar de ReferenceEquals()
?
Solución
Aquí están las diferentes semánticas:
-
ReferenceEquals()
debe ser utilizado si usted quiere decir que los objetos son exactamente los mismos (control de identidad). -
object.Equals()
se utilizará si usted se refiere a los objetos tienen el mismo valor (comprobación de igualdad) -
==()
se utilizará únicamente para los tipos inmutables. A continuación, utilizarlo para prueba de igualdad.
Por supuesto, los homólogos Inversed están destinados en consecuencia.
Otros consejos
== debe probar para ver si los puntos de referencia en la misma ubicación mientras que las pruebas ReferenceEquals para ver si contienen los mismos datos