IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C# Discussion :

[C#] Peut-on comparer strings en passant simplement par l'opérateur == ?


Sujet :

C#

  1. #1
    Membre confirmé Avatar de bartoumi
    Profil pro
    Inscrit en
    Février 2005
    Messages
    178
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 178
    Par défaut [C#] Peut-on comparer strings en passant simplement par l'opérateur == ?
    Bonjour
    Je cherche a savoir si dans un test if je peux comparer de chaine string avec l'operateur ==
    exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    string s1 = string.empty ;
    string s2 = string.empty ;
    s1 = "toto" ;
    s2 = "toto" ;
    if( s1 == s2 ) // est ce que je pourrai le faire ?
                      // ou faut il vraiment mettre .COMPARE()
    Merci

  2. #2
    Membre émérite
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    487
    Détails du profil
    Informations personnelles :
    Âge : 56
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations forums :
    Inscription : Juillet 2002
    Messages : 487
    Par défaut
    1. Lire les règles du forum : http://www.developpez.net/forums/showthread.php?t=31919
    2. Quel est le résultat de tes essais ?

  3. #3
    Membre confirmé Avatar de bartoumi
    Profil pro
    Inscrit en
    Février 2005
    Messages
    178
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 178
    Par défaut
    J'ai pas fais de test: Parce que apparemment parfois ça marche parfois ça marche pas.

    J'attend une reponse Merci.

  4. #4
    Expert confirmé
    Avatar de neguib
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    3 627
    Détails du profil
    Informations personnelles :
    Âge : 65
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 627
    Par défaut
    Citation Envoyé par bartoumi
    J'ai pas fais de test: Parce que apparemment parfois ça marche parfois ça marche pas.

    J'attend une reponse Merci.
    il aurais été interressant de nous decrire dans quelles conditions les utilisations de l'opérateur == ne fonctionnent pas. Auquel cas pour le type string, il me semble que la méthode Equals devrait être sûre.

  5. #5
    Membre émérite
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    487
    Détails du profil
    Informations personnelles :
    Âge : 56
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations forums :
    Inscription : Juillet 2002
    Messages : 487
    Par défaut
    Le == compare des références d'objets.
    Cela va marcher uniquement avec des chaînes constantes. Le compilateur optimise le stockage des chaîne en évitant de recopier plusieurs fois la même.
    Les chaînes "toto" auront donc la même référence et de ce fait, la comparaison est vrai.

    Dans le cas général, le résultat sera faux.
    Il faut utiliser String.Equals()

  6. #6
    Membre confirmé Avatar de bartoumi
    Profil pro
    Inscrit en
    Février 2005
    Messages
    178
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 178
    Par défaut
    Bonjour
    Au fait y'a pas de condition particulieres.
    La question est est ce que si je compare deux string avec l'operateur == j'aurais un resultat 100% juste.
    La polemeique viens de mes colegues de travail qui eux disent que l'operateur == n'est pas fiable ?
    MErci

  7. #7
    Membre émérite
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    487
    Détails du profil
    Informations personnelles :
    Âge : 56
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations forums :
    Inscription : Juillet 2002
    Messages : 487
    Par défaut
    Citation Envoyé par bartoumi
    La polemeique viens de mes colegues de travail qui eux disent que l'operateur == n'est pas fiable ?
    Il est parfaitement fiable.
    Le résultat obtenu n'est simplement pas la comparaison du contenu des string.

  8. #8
    Membre éprouvé
    Inscrit en
    Juillet 2005
    Messages
    83
    Détails du profil
    Informations forums :
    Inscription : Juillet 2005
    Messages : 83
    Par défaut
    Le == compare des références d'objets.
    Ce n'est pas tout à fait exact.
    L'opérateur == est surchargé pour des objets de type string et effectue bien une comparaison par valeur, et non par référence.
    Mais ce n'est valable que si les deux membres de la comparaison sont clairement identifiés de type string à la compilation.
    Une comparaison entre un Object et une String sera une comparaison par référence (d'ailleurs le compilateur génère un avertissement dans ce cas).

  9. #9
    Membre émérite
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    652
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 652
    Par défaut
    Citation Envoyé par NicolasG
    Il est parfaitement fiable.
    Le résultat obtenu n'est simplement pas la comparaison du contenu des string.
    Justement si, vu que dans le cas de String, la méthode Equals est redéfinie pour comparer les valeurs. Et vu que == utilise au final la méthode Equals...

  10. #10
    Membre émérite
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    487
    Détails du profil
    Informations personnelles :
    Âge : 56
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations forums :
    Inscription : Juillet 2002
    Messages : 487
    Par défaut
    Bon, il faut bien reconnaître que je me suis trompé.
    Effectivement, String surcharge l'opérateur == en se basant sur la méthode Equals.

    Comme l'a fait remarquer Wyatan, ce n'est valable que pour 2 objets de type String.

  11. #11
    Expert confirmé
    Avatar de neguib
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    3 627
    Détails du profil
    Informations personnelles :
    Âge : 65
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 627
    Par défaut
    Conclusion utiliser mastring1.Equals("mastring2"); est parfaitement fiable

  12. #12
    Membre émérite
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    652
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 652
    Par défaut
    Citation Envoyé par neguib
    Conclusion utiliser mastring1.Equals("mastring2"); est parfaitement fiable
    Sauf si mastring1 est null, auquel cas ça plante. Cas qui est géré automatiquement avec ==

    Maintenant si on est sûr que la variable n'est pas nulle, utiliser .Equals est de manière générale 'préférable' à ==, quels que soient les types des variables, par le simple fait que Equals est polymorphique, et pas ==

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Peut-on comparer les informaticiens à du lubrifiant
    Par thaundeadboss dans le forum La taverne du Club : Humour et divers
    Réponses: 41
    Dernier message: 11/07/2011, 19h06
  2. Réponses: 3
    Dernier message: 27/04/2010, 12h13
  3. Peut on comparer UML avec Merise ?
    Par wafiwafi dans le forum UML
    Réponses: 5
    Dernier message: 09/09/2009, 00h25
  4. Peut-on comparer un fichier du cache avec un fichier qu'on veut précharger ?
    Par 12_darte_12 dans le forum Général Conception Web
    Réponses: 1
    Dernier message: 05/12/2006, 12h13
  5. Réponses: 4
    Dernier message: 21/09/2004, 21h25

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo