En utilisant == ou Equals pour comparaison de chaînes
-
21-09-2019 - |
Question
Dans certaines langues (par exemple C ++) vous ne pouvez pas utiliser des opérateurs comme == pour les comparaisons de chaînes que celle comparerait l'adresse de l'objet chaîne, et non la chaîne elle-même. Cependant, en C # vous pouvez utiliser == pour comparer des chaînes, et il fait comparer le contenu des chaînes. Mais il y a aussi des fonctions de chaîne pour gérer ces comparaisons, ma question est donc; devrais-tu?
Compte tenu de deux chaînes:
string aa = "aa";
string bb = "bb";
Si vous comparez comme ceci:
bool areEqual = (aa == bb);
Ou si vous utilisez la fonction égale, comme ceci:
bool areEqual = aa.Equals(bb);
Y at-il de toute façon aucune différence technique? Ou des arguments raisonnables pour les meilleures pratiques?
La solution
Je ne voudrais pas utiliser:
aa.Equals(bb)
à moins que je savait aa
ne pouvait pas peut est nulle. Je pourrais utiliser:
string.Equals(aa,bb)
Mais j'utiliser principalement que je voulais utiliser l'un des modes de StringComparison
spécifiques (invariant, ordinales, insensibles à la casse, etc.). Bien que je pourrais aussi utiliser les implémentations de StringComparer
, car ils sont un peu plus facile à l'abstrait (par exemple, de passer dans un Dictionary<string, Foo>
pour un dictionnaire ordinale insensible à la casse). Pour une utilisation à usage général,
a == b
est très bien.
Autres conseils
Ceci est la mise en œuvre de l'opérateur:
public static bool operator == (String a, String b) {
return String.Equals(a, b);
}
Ne perdez pas le sommeil à ce sujet.
Il n'y a pas de différence technique (sauf si aa est nulle). Utilisez tout ce que vous semble mieux. À mon avis, à l'aide de l'opérateur rend surcharge le code plus clair.
Utiliser les fonctions lorsque vous avez besoin (ou peut-être besoin à l'avenir) leurs arguments supplémentaires (comme dans CompareTo ())
Best-pratique sage, je aurais tendance à toujours utiliser une fonction equals () pour la comparaison de chaînes. Cela rend clair quand quelqu'un lit bien votre code que vous voulez spécifiquement les chaînes comparées.
d'une manière générale, == fait l'égalité de pointeur, alors que les contrôles de .equals si les attributs sont égaux. Donc, si vous avez fait quelque chose comme
a = 'a';
b = 'a';
bool c = (a == b);
bool d = (a.Equals(b))
alors c devrait revenir faux et d doit être vrai.