C # Chaîne de caractères Problèmes sexuels égaux:
et Comparez ==
Equals()
C # propose deux opérateurs de chaîne de comparaison:
. Bien qu'ils semblent pouvoir échanger, ils montrent des comportements uniques et peuvent conduire à des résultats inattendus. Explorons ce problème de langue à travers une scène spécifique. ==
Equals()
Dans une application Silverlight, une condition compare deux chaînes:
Étrangement,
<code class="language-csharp">if (((ListBoxItem)lstBaseMenu.SelectedItem).Content.Equals("Energy Attack")) { // 执行代码 } if (((ListBoxItem)lstBaseMenu.SelectedItem).Content == "Energy Attack") { // 执行代码 }</code>
Rappelez-vous vrai. Pourquoi y a-t-il une telle différence? ==
Equals()
La réponse réside dans la mise en œuvre sous-jacente de ces opérateurs. Lorsqu'il est utilisé avec une expression d'objet,
. Cette méthode compare la référence d'objet, pas le contenu ==
System.Object.ReferenceEquals
. Dans ce cas, les deux chaînes sont stockées dans différentes positions de mémoire, donc revient à false.
ReferenceEquals
En revanche, est une méthode virtuelle qui peut être réécrite par type dérivé. Pour les types de chaînes, la version réécrite du contenu
, renvoyant ainsi True. Equals
Par conséquent, pour la comparaison de la chaîne de chaîne, il est recommandé d'utiliser , il est plus intuitif et il effectue la comparaison basée sur le contenu.
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!