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 :

Vérifier l’existence d'un objet dans une List [Débutant]


Sujet :

C#

  1. #1
    Membre éprouvé Avatar de shaun_the_sheep
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Octobre 2004
    Messages
    1 619
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : Enseignement

    Informations forums :
    Inscription : Octobre 2004
    Messages : 1 619
    Par défaut Vérifier l’existence d'un objet dans une List
    Bonjour,

    J'ai une liste qui contient des objets métiers , je cherche un moyen simple pour vérifier si dans ma liste un objet précis existe déjà.

    Mon Objet est une classe qui contient trois attributs soit une clé, une date et une valeur numérique.

    Ce que je veux vérifier c'est la clé.

    Merci de votre aide.

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    177
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 177
    Par défaut
    Bonjour, en Linq, on peut faire un truc du genre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    maList.Any(i => i.Key ==monEntity.maCle)
    renvoie true si l'objet existe sinon false.

  3. #3
    Membre éprouvé Avatar de shaun_the_sheep
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Octobre 2004
    Messages
    1 619
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : Enseignement

    Informations forums :
    Inscription : Octobre 2004
    Messages : 1 619
    Par défaut
    en fouillant dans le forum j'ai trouvé ma réponse :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
                VaccinsParticipant vaccinsParticipantFind = liste_Vaccins_Participants.Find(delegate(VaccinsParticipant liste_Vaccins_ParticipantsALire)
                                                {
                                                    return liste_Vaccins_ParticipantsALire.Vaccin.Code == codeVaccin;
                                                });
                                                });

  4. #4
    Membre émérite

    Homme Profil pro
    Développeur .NET
    Inscrit en
    Juin 2011
    Messages
    487
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Finance

    Informations forums :
    Inscription : Juin 2011
    Messages : 487
    Par défaut
    Le code que tu as trouvé est assez horrible, je te le déconseille.

    Je te conseille plutôt la réponse de Arsenic68.
    Mon blog sur les technos .NET et Agile -> http://blog.developpez.com/maximepalmisano/

  5. #5
    Membre éprouvé Avatar de shaun_the_sheep
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Octobre 2004
    Messages
    1 619
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : Enseignement

    Informations forums :
    Inscription : Octobre 2004
    Messages : 1 619
    Par défaut
    Pourquoi horrible ?

  6. #6
    Membre émérite

    Homme Profil pro
    Développeur .NET
    Inscrit en
    Juin 2011
    Messages
    487
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Finance

    Informations forums :
    Inscription : Juin 2011
    Messages : 487
    Par défaut
    Ben mets les deux bouts de code dans un IDE côte à côte et essaye de voir la différence.

    Y'en a un qui est parlant, l'autre non.
    Mon blog sur les technos .NET et Agile -> http://blog.developpez.com/maximepalmisano/

  7. #7
    Membre Expert
    Avatar de Sehnsucht
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Octobre 2008
    Messages
    847
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Lot et Garonne (Aquitaine)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Octobre 2008
    Messages : 847
    Par défaut
    Bonsoir,

    Bah c'est juste que dans un cas on utilise un delegate et dans l'autre une lambda ; selon la version du framework on peut être obligé de n'utiliser que des delegate (et dans ce cas le Any serait aussi "moche").

    Après on peut tout aussi bien utiliser une lambda avec Find (sans doute que la réponse trouvée par l'OP date un peu)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    var vaccinsParticipantFind = liste_Vaccins_Participants.Find(participant => participant.Vaccin.Code == codeVaccin);
    Surtout que ces Find et Any ne renvoient pas la même chose, Find renverra l'élément (ou default(VaccinsParticipant) s'il n'est pas trouvé) alors qu'Any renverra true/false ; l'équivalent Linq du Find serait plus un First (ou FirstOrDefault) voire un Single (ou SingleOrDefault) si on veut assurer l'unicité.

    Après j'ai pas regardé l'implémentation mais il semble raisonnable de penser que Find est plus optimisé sur les List<T> qu'un First.

    Cordialement !

  8. #8
    Membre éprouvé Avatar de shaun_the_sheep
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Octobre 2004
    Messages
    1 619
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : Enseignement

    Informations forums :
    Inscription : Octobre 2004
    Messages : 1 619
    Par défaut
    Merci pour ces explications.

  9. #9
    Membre émérite

    Homme Profil pro
    Développeur .NET
    Inscrit en
    Juin 2011
    Messages
    487
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Finance

    Informations forums :
    Inscription : Juin 2011
    Messages : 487
    Par défaut
    selon la version du framework on peut être obligé de n'utiliser que des delegate (et dans ce cas le Any serait aussi "moche").
    La n'est pas la question, je parlais des deux bouts de code, pas des contraintes techniques.

    De plus, il veut savoir si un objet est présent dans une liste, donc oui un Any qui retourne un booléen est plus clair qu'un Find qui retourne un objet. Après c'est juste mon avis.
    Mon blog sur les technos .NET et Agile -> http://blog.developpez.com/maximepalmisano/

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

Discussions similaires

  1. Comment Manipuler des objets dans une liste de type TList ?
    Par PadawanDuDelphi dans le forum Delphi
    Réponses: 1
    Dernier message: 02/11/2006, 15h40
  2. Réponses: 1
    Dernier message: 08/09/2006, 17h21
  3. récupérer un objet dans une liste chainée
    Par marsuwhite dans le forum Langage
    Réponses: 4
    Dernier message: 05/06/2006, 14h05
  4. insertion d'objets dans une liste chainee
    Par mathher dans le forum C++
    Réponses: 8
    Dernier message: 20/04/2006, 16h28
  5. [Swing][JList] Placer un Objet dans une liste
    Par Invité dans le forum Composants
    Réponses: 1
    Dernier message: 17/02/2006, 10h31

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