Comparaison de chaînes C# : la différence entre string.Equals()
et ==
En C#, la méthode string.Equals()
et l'opérateur ==
se ressemblent beaucoup, mais il existe entre eux des différences subtiles qui peuvent conduire à des résultats inattendus.
Polymorphisme et types d'exécution
Une différence clé est le polymorphisme. Equals()
est une méthode polymorphe, ce qui signifie que son implémentation peut être remplacée en fonction du type d'exécution de l'objet cible. En revanche, l'implémentation de ==
est déterminée uniquement par les types des opérandes au moment de la compilation. Cette différence devient apparente lors de la comparaison d'objets de différents types, car l'implémentation Equals()
de la classe de l'objet cible sera appelée et ==
effectuera une comparaison de référence basée sur le type au moment de la compilation.
Valeurs nulles et exceptions
Une autre différence est la façon dont les valeurs nulles sont gérées. Si Equals()
est appelé sur un objet nul, il lèvera une exception NullReferenceException
, tandis que ==
renverra simplement false
. Cela peut devenir un problème lors de la comparaison d'objets pouvant être nuls. Pour éviter ce problème, vous pouvez utiliser la méthode object.Equals()
, qui vérifie les valeurs nulles avant d'appeler Equals()
.
Exemple
Considérez le code suivant :
<code class="language-csharp">object x = new StringBuilder("hello").ToString(); object y = new StringBuilder("hello").ToString(); // Equals() 将比较值,考虑运行时类型 if (x.Equals(y)) // True // == 将执行引用比较,而不管运行时类型 if (x == y) // False</code>
Dans cet exemple, x
compare correctement les valeurs de y
et Equals()
même si x
et y
sont des types d'objets différents. Cependant, ==
effectue une comparaison de références et renvoie false
car ce ne sont pas des instances du même objet chaîne.
Conclusion
Bien que Equals()
et ==
se ressemblent, leur comportement diffère sur des points essentiels. Comprendre ces différences est crucial pour éviter les comparaisons de chaînes inattendues et garantir une vérification appropriée de l'égalité des objets.
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!