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?

Était-ce utile?

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.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top