Nicht sicher, was Sie mit "geschrieben, um dem deklarativen Stil zu folgen" meinen, aber ReferenceEquals
wird normalerweise verwendet, wenn der Operator ==
überschrieben wird. Von Ссылка :
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.
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.
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.
Tags und Links .net c# reference pointers collections