Heim >Backend-Entwicklung >C++ >String-Vergleich in C#: Wann sind „String.Equals()' und „==' austauschbar?
Verwirrung beim C#-Stringvergleich: Sind die String.Equals()
-Methode und der ==
-Operator austauschbar?
In C# können Zeichenfolgenvergleiche manchmal zu unerwarteten Ergebnissen führen. Eine häufige Frage ist, ob sich die String.Equals()
-Methode und der ==
-Gleichheitsoperator genau gleich verhalten.
Bedenken Sie den folgenden Codeausschnitt:
<code class="language-csharp">string s = "Category"; TreeViewItem tvi = new TreeViewItem(); tvi.Header = "Category"; Console.WriteLine(s == tvi.Header); // false Console.WriteLine(s.Equals(tvi.Header)); // true Console.WriteLine(s == tvi.Header.ToString()); // true</code>
Obwohl s
und tvi.Header
denselben Wert „Kategorie“ enthalten, gibt der ==
-Operator false
zurück und die String.Equals()
-Methode gibt true
zurück. Dies wirft die Frage auf: Warum liefern diese beiden Vergleichsmethoden unterschiedliche Ergebnisse?
String.Equals()
und ==
String.Equals()
und ==
:
==
-Operator vergleicht basierend auf dem Typ des Objekts zur Kompilierungszeit, während String.Equals()
polymorph ist, was bedeutet, dass seine Implementierung von der Laufzeit des verglichenen Objekttyps abhängt . ==
-Operator löst beim Vergleich von Nullreferenzen keine Ausnahme aus, während der String.Equals()
-Operator eine NullReferenceException
-Ausnahme auslöst, wenn eines der Argumente null ist. Beispiel, das den Unterschied zeigt
Um diese Unterschiede zu veranschaulichen, betrachten Sie den folgenden Code:
<code class="language-csharp">object x = new StringBuilder("hello").ToString(); object y = new StringBuilder("hello").ToString(); if (x.Equals(y)) // True if (x == y) // False</code>
Obwohl x
und y
denselben Wert haben, gibt der ==
-Operator false
zurück, da der Vergleich auf der Grundlage des Typs des Objekts zur Kompilierungszeit (object
) erfolgt, der unterschiedlich ist. Um einen korrekten Vergleich zu erhalten, muss das Objekt explizit in den entsprechenden Typ umgewandelt werden (in diesem Fall string
).
<code class="language-csharp">string xs = (string)x; string ys = (string)y; if (xs == ys) // True</code>
Fazit
Während die Operatoren String.Equals()
und ==
häufig synonym verwendet werden, ist es wichtig, die subtilen Unterschiede in ihrer Implementierung und der Handhabung von Nullwerten zu verstehen. Um zuverlässige und konsistente String-Vergleiche zu gewährleisten, wird generell die Verwendung der String.Equals()
-Methode empfohlen, insbesondere beim Vergleich von Objekten unterschiedlichen Typs oder beim Umgang mit Nullreferenzen.
Das obige ist der detaillierte Inhalt vonString-Vergleich in C#: Wann sind „String.Equals()' und „==' austauschbar?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!