Maison >développement back-end >C++ >Comparaison de chaînes en C# : quand `String.Equals()` et `==` sont-ils interchangeables ?

Comparaison de chaînes en C# : quand `String.Equals()` et `==` sont-ils interchangeables ?

Barbara Streisand
Barbara Streisandoriginal
2025-01-22 11:31:12590parcourir

String Comparison in C#: When Are `String.Equals()` and `==` Interchangeable?

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 ?

Principales différences entre

String.Equals() et ==

Il existe deux différences fondamentales entre les opérateurs

String.Equals() et == :

  1. implémentation spécifique au type : l'opérateur == 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é .
  2. Gestion des valeurs nulles : l'opérateur == 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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn