10
votes

Utilisation == ou égaux à la comparaison des chaînes

Dans certaines langues (E.G. C ++), vous ne pouvez pas utiliser les opérateurs comme == pour les comparaisons de chaîne, car cela comparerait l'adresse de l'objet String et non la chaîne elle-même. Cependant, en C #, vous pouvez utiliser == pour comparer les chaînes et comparera en fait le contenu des chaînes. Mais il y a aussi des fonctions de chaîne pour gérer de telles comparaisons, alors ma question est donc; devrais-tu?

donné deux chaînes: p> xxx pré>

Si vous les comparez comme ceci: p> xxx pré>

ou devriez-vous utiliser l'égal Fonction, comme ceci: P>

bool areEqual = aa.Equals(bb); 


2 commentaires

QuiBble mineur: En C ++, STD :: String peut être comparé à l'opérateur ==. C'est caractère [] et char * qui ne peut pas. Le terme string est quelque peu ambigu à C ++.


Merci d'avoir refusé ça! Cela fait longtemps que je faisais C ++, et il est évident que mes archives sont un peu bourdonnées ..


5 Réponses :


24
votes

Je n'utiliserais pas: xxx

sauf si je savait aa ne pouvait pas éventuellement être nul. Je pourrais utiliser: xxx

mais j'aurais principalement utilisé que je souhaitais utiliser l'un des modes spécifiques stringcomparison (invariant, ordinal, case -Sensible, etc.). Bien que je puisse également utiliser les implémentations stringcomparer , car ils sont un peu plus faciles à résumer (par exemple, de passer dans un dictionnaire dictionnaire pour une casse-insensible Dictionnaire ordinal). Pour une utilisation générale, xxx

est bien.


0 commentaires

2
votes

Il n'y a pas de différence technique (sauf si AA n'est nul). Utilisez tout ce qui vous semble meilleur. À mon avis, l'utilisation des surcharges de l'opérateur rend le code plus clair.

Utilisez des fonctions lorsque vous avez besoin (ou pourraient avoir besoin à l'avenir) leurs arguments supplémentaires (comme dans le comparète ())


0 commentaires

1
votes

best-pratique-sage, j'aurais tendance à toujours utiliser une fonction égale () pour la comparaison des chaînes. Cela indique clairement lorsque quelqu'un d'autre lit votre code que vous souhaitez spécifiquement les chaînes comparées.


1 commentaires

... par opposition à la comparaison spécifique des références d'objet



-3
votes

En règle générale, == L'égalité du pointeur, tandis que les angles vérifient 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))


4 commentaires

Il vraiment dépend de ce que a et b sont saisis comme ici. S'ils sont chaîne , il ne compilera pas. S'ils sont Char , il sera vrai deux fois. S'ils sont objet , il sera false / vrai . Mais aucune de ces personnes ne correspondent à la question (et vous auriez besoin de surveiller également le compilateur.


Pas nécessairement que .NET utilise la chaîne interne, ce qui signifie que cela pourrait réellement être la même chaîne sous les couvertures.


@RCIX - qui ne s'appliquerait que pour string a = "A"; String b = "A"; , mais oui, je suis d'accord.


@RCIX - ou plus important encore, objet a = "a"; objet b = "a";



25
votes

Ceci est la mise en œuvre de l'opérateur:

    public static bool operator == (String a, String b) {
       return String.Equals(a, b);
    }


1 commentaires

Maintenant, c'est utile de savoir! :-) Pas de sommeil perdu de toute façon - je me demandais vraiment s'il y a une meilleure pratique.