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 :

contains ne marche pas


Sujet :

C#

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2012
    Messages
    105
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2012
    Messages : 105
    Par défaut contains ne marche pas
    Bonjour,

    J'utilise la méthode contains sur une liste d'objets, mais cela ne fonctionne pas.
    En cherchant un peu, je me suis aperçu que c'était sûrement du au fait que je n'ai pas redéfini les méthodes equals et hascode.
    Pour equals, je l'ai faite, mais comment redéfinir hashcode?

    Merci

  2. #2
    Invité
    Invité(e)
    Par défaut
    Soit plus précis.

    Je n'ai pas compris grand chose à ton probleme

  3. #3
    Membre éprouvé
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2011
    Messages
    141
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2011
    Messages : 141
    Par défaut
    Es-tu sûr que cela vient du fait que tu n'aies pas redéfini ces méthodes?

    Je demande cela car je n'ai réellement jamais eu de souci avec Contains()...

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2012
    Messages
    105
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2012
    Messages : 105
    Par défaut
    J'ai une liste de langue. Ma classe Langues ne contient pas grand chose : nom, niveau et les getters/setters pour ces deux propriétés.

    Je veux demander a un user quelles langues il parle ... donc dans un formulaire, j'ai une dropdownlist avec les langues, et l'user peut choisir une langue, cliquer sur le bouton "ajouter langue" et lorsqu'il fait ceci, je rajoute à la liste de langues. Mais je veux vérifier que la liste ne contient pas deja la langue en question en faisant

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if (user.sesLangues.Contains(new Langues(dropdown1.SelectedItem.Text)))
    sesLangues est la liste de langues (qui ne contient que le nom, pas le niveau)
    et je compare avec la langue choisie dans la dropdownlist.
    J'ai aussi essayé comme ca :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Langues l1 = new Langues (dropdown1.SelectedItem.Text);
    if (user.sesLangues.Contains(l1))
    Lorsque je teste et que j'ajoute deux fois la même langue, ça ne passe pas dans le if.

    Merci

  5. #5
    Membre éprouvé
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2011
    Messages
    141
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2011
    Messages : 141
    Par défaut
    Un contains ne renvoit true que si les deux objets testés sont équivalents.

    Tu nous dis que ta classe Langue a deux propriétés (nom et niveau), mais lorsque tu fais ton Contains tu instancies une langue uniquement via un nom.

    Le problème pourrait venir de là...

  6. #6
    Membre expérimenté
    Avatar de SoBaKa
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Juillet 2006
    Messages
    242
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juillet 2006
    Messages : 242
    Par défaut
    Bonjour,

    Le "Contains" ne va vérifier uniquement les références des objets contenus dans cette liste... Toi tu instancies un nouvel objet de type "Langues", donc à tous les coup cette méthode te renverra false...

    Dans ton cas, je passerais par linq :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    if(user.sesLangues.Any(l => l.Nom == dropdown1.SelectedItem.Text))
    {
      // langue est déjà dans la liste
    }
    else 
    {
      // OK on peut ajouter...
    }

  7. #7
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2012
    Messages
    105
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2012
    Messages : 105
    Par défaut
    Non, car j'ai précisé que dans cette liste ci il n'y a pas le niveau.
    J'ai deux constructeurs, un qui prend nom + niveau et l'autre uniquement le nom.
    J'utilise le 2e ici.

    Je ne vois pas pourquoi ça ne marche pas, à part cette histoire de hashcode que je ne sais pas régler ...

  8. #8
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2012
    Messages
    105
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2012
    Messages : 105
    Par défaut
    SoBaKa, merci

    Ça marche !!

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

Discussions similaires

  1. object.equals et arraylist.contains ne marche pas
    Par bobby51 dans le forum Windows Forms
    Réponses: 0
    Dernier message: 10/03/2009, 10h36
  2. ArrayList : pourquoi .Contains ne marche pas ?
    Par NeoGeoo dans le forum Collection et Stream
    Réponses: 5
    Dernier message: 05/03/2009, 14h18
  3. 'SHOW TABLES' marche pas sous postgresql !?
    Par fet dans le forum PostgreSQL
    Réponses: 4
    Dernier message: 13/05/2004, 09h28
  4. Réponses: 9
    Dernier message: 07/05/2003, 12h57
  5. Sysdate qui marche pas ??
    Par StouffR dans le forum Langage SQL
    Réponses: 4
    Dernier message: 28/08/2002, 13h23

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