Maison >développement back-end >C++ >Comparaison de chaînes en C# : quand `String.Equals()` et `==` sont-ils interchangeables ?
Confusion dans la comparaison de chaînes C# : la méthode String.Equals()
et l'opérateur ==
sont-ils interchangeables ?
En C#, les comparaisons de chaînes peuvent parfois produire des résultats inattendus. Une question courante est de savoir si la méthode String.Equals()
et l'opérateur d'égalité ==
se comportent exactement de la même manière.
Considérez l'extrait de code suivant :
<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>
Bien que s
et tvi.Header
contiennent la même valeur "Catégorie", l'opérateur ==
renvoie false
et la méthode String.Equals()
renvoie true
. Cela soulève la question : pourquoi ces deux méthodes de comparaison produisent-elles des résultats différents ?
String.Equals()
et ==
String.Equals()
et ==
:
==
compare en fonction du type de compilation de l'objet, tandis que String.Equals()
est polymorphe, ce qui signifie que son implémentation dépend du temps d'exécution du type d'objet comparé . ==
ne lèvera pas d'exception lors de la comparaison de références nulles, tandis que l'opérateur String.Equals()
lèvera une exception NullReferenceException
si l'un des arguments est nul. Exemple démontrant la différence
Pour illustrer ces différences, considérons le code suivant :
<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>
Bien que x
et y
aient la même valeur, l'opérateur ==
renvoie false
car il compare en fonction du type de compilation de l'objet (object
), qui sont différents. Afin d'obtenir une comparaison correcte, l'objet doit être explicitement converti en type approprié (string
dans ce cas).
<code class="language-csharp">string xs = (string)x; string ys = (string)y; if (xs == ys) // True</code>
Conclusion
Bien que les opérateurs String.Equals()
et ==
soient souvent utilisés de manière interchangeable, il est important de comprendre les différences subtiles dans leur implémentation et la gestion des valeurs nulles. Pour garantir des comparaisons de chaînes fiables et cohérentes, il est généralement recommandé d'utiliser la méthode String.Equals()
, notamment lors de la comparaison d'objets de types différents ou lorsqu'il s'agit de références nulles.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!