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

War es hilfreich?

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.

Hier ist eine Zusammenfassung

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
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top