Legitime Verwendung von ReferenceEquals ()

7

In einem .NET-Programm, das nach dem deklarativen Stil geschrieben wurde, gibt es einige legitime Anwendungen für ReferenceEquals ()?

    
GregC 28.03.2012, 15:38
quelle

3 Antworten

12

Nicht sicher, was Sie mit "geschrieben, um dem deklarativen Stil zu folgen" meinen, aber ReferenceEquals wird normalerweise verwendet, wenn der Operator == überschrieben wird. Von Ссылка :

%Vor%

Es ist wichtig, die Anmerkung unten für die Begründung zu sehen:

  

Hinweis: Ein häufiger Fehler in Überladungen von operator == ist die Verwendung von (a == b), (a == null) oder (b == null) zur Überprüfung der Referenzgleichheit . Dies   erstellt stattdessen einen Aufruf für den überladenen Operator ==, wodurch ein Fehler verursacht wird   Endlosschleife. Verwenden Sie ReferenceEquals, oder konvertieren Sie den Typ zu Object, to   vermeide die Schleife.

    
Chris Shain 28.03.2012, 15:41
quelle
11
  

In einem .NET-Programm, das nach dem deklarativen Stil geschrieben wurde, gibt es einige legitime Anwendungen für ReferenceEquals ()?

Es gibt nur eine zulässige Verwendung von ReferenceEquals, unabhängig vom "Stil", in dem das Programm geschrieben ist: um zwei Referenzen für die Referenzgleichheit zu vergleichen.

Wenn Sie ReferenceEquals für etwas anderes als den Vergleich zweier Referenzen für die Referenzgleichheit verwenden, tun Sie wahrscheinlich etwas falsch.

    
Eric Lippert 28.03.2012 15:45
quelle
1

Nun, wenn das Design und / oder die Verwendung der verwandten Objekte so ist, dass es niemals mehr als eine Instanz eines Objekts gibt, die "gleich" ist, dann ist es korrekt und es ist wahrscheinlich schneller als einige Anzahl von Instanzvariablen zu vergleichen.

Oder, wie in einer anderen Antwort angegeben, können Sie es zuerst als "easy out" überprüfen und nur dann eine Deep Equals-Prüfung durchführen, wenn sie unterschiedlich sind. Dies ist nur eine Leistungsverbesserung.

    
Servy 28.03.2012 15:42
quelle