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()?

¿Fue útil?

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.

a continuación se presenta un resumen

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

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top