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 :

Dépendance entre deux List


Sujet :

C#

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2011
    Messages
    53
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Maritime (Haute Normandie)

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

    Informations forums :
    Inscription : Juin 2011
    Messages : 53
    Points : 29
    Points
    29
    Par défaut Dépendance entre deux List
    Bonjour !

    J'ai un problème de dépendance entre deux List, explication :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    List<objet> List1 = new List<objet>();
     
    #Traitement de la liste 1#
     
    List<objet> List2 = new List<objet>();
    List2 = List1;
     
    foreach (objet result in List2)
    {
    #Modification de result#
    }
    Lorsque j'effectue la modification de result il est modifier dans les deux List et ce n'est pas du tout ce que je cherche car j'ai besoin de garder la List1 dans l'état ou elle est.

    Merci d'avance !

  2. #2
    Membre éclairé
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Septembre 2011
    Messages
    610
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Septembre 2011
    Messages : 610
    Points : 713
    Points
    713
    Par défaut
    Salut!!

    Tout d'abord pour la copie, procède de liste procède de cette façon:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    List<objet> List2 = new List<objet>(List1);
    Citation Envoyé par Zarrows Voir le message
    Lorsque j'effectue la modification de result il est modifier dans les deux List et ce n'est pas du tout ce que je cherche car j'ai besoin de garder la List1 dans l'état ou elle est.
    Pour le reste je n'ai pas tout compris , ou plutôt je ne vois pas comment tu peux arrivé à modifier les 2 list depuis l'objet result...

  3. #3
    Membre habitué
    Homme Profil pro
    Architecte C#
    Inscrit en
    Février 2003
    Messages
    78
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Architecte C#

    Informations forums :
    Inscription : Février 2003
    Messages : 78
    Points : 144
    Points
    144
    Par défaut
    tu peux modifier result,en revanche, tu ne pourra le supprimer ni de list1, ni de list2, qui pointent sur la meme liste en mémoire.

    ce qui est permis en revanche, c'est un code du genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    List<objet> List1 = new List<objet>();
     
    //Traitement de la liste 1
    
    foreach (objet result in List1.ToArray()) // ou .ToList()
    {
    //Modification de result voire suppression de List1
    List1.Remove(result);
    
    }
    les méthodes d'extension .ToArray() et .ToList() créent un nouvel objet enumerable a partir de ta collection ainsi, tu parcoura l'objet crée et pourra modifier ta liste.

  4. #4
    Membre émérite Avatar de Guulh
    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    2 160
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Septembre 2007
    Messages : 2 160
    Points : 2 925
    Points
    2 925
    Par défaut
    Hello,
    En C#, il y a des types référence, et des type valeur.
    Type reference : class. Par exemple : Window
    Type valeur : struct. Par exemple : int, Datetime, ...

    List est un type reference. Ca signifie que quand t'écris
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    List<object> a = ...;
    List<object> b = a;
    a et b référencent la même liste.
    Si tu veux une autre liste, mais avec les même éléments, il n'y a pas de solution dans le cas général. Mais il se trouve que List a un constructeur qui repnd un IEnumerable en paramètre. Donc tu peux écrire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    List<object> b = new List<object>(a);
    Et là, tu as deux listes indépendantes.

    Cette différence entre type référence et type valeur est primordiale, je t'invite à te documenter à ce sujet.
    ಠ_ಠ

  5. #5
    Membre éclairé
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Septembre 2011
    Messages
    610
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Septembre 2011
    Messages : 610
    Points : 713
    Points
    713
    Par défaut
    Citation Envoyé par Guulh Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    List<object> a = ...;
    List<object> b = a;
    a et b référencent la même liste.
    Merci pour l'explication Guulh

  6. #6
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2011
    Messages
    53
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Maritime (Haute Normandie)

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

    Informations forums :
    Inscription : Juin 2011
    Messages : 53
    Points : 29
    Points
    29
    Par défaut
    Bien merci j'avais lu ce genre de chose :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    List<objet> List2 = new List<objet>(List1);
    Puis essayer mais lorsque je modifier un élément dans la List2 il était modifier dans la List1, grâce à la réponse de Vimaire je pense pouvoir résoudre mon problème, j'essayerais demain avant de mettre "Résolu", merci à tous de vos réponse

  7. #7
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2011
    Messages
    53
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Maritime (Haute Normandie)

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

    Informations forums :
    Inscription : Juin 2011
    Messages : 53
    Points : 29
    Points
    29
    Par défaut
    Finalement, avec la méthode de Vimaire, cela ne fonctionne pas. Lorsque je modifie les valeurs de mes objets dans la List2 qui est une copie de ma List1 ou j'effectue ma copie comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    List<objet> List2 = new List<objet>(List1);
    Mes deux List sont encore liés.

    J'ai ensuite essayer avec une boucle "for" et modifier les paramètres de mon objet en utilisant l'index de la List2 pour modifier mes 'objet'.
    Même résultat...

    J'ai ensuite essayer de remplir ma List2 à travers une boucle qui instancie un nouvelle 'objet' qui prend les paramètres de l'objet de ma List1. Et cela a fonctionner !

    Je sais pas si j'ai été claire .

    Merci en tout cas pour votre aide

  8. #8
    Membre éprouvé

    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
    Points : 945
    Points
    945
    Par défaut
    Tes listes ne sont pas liées, elles font juste référence aux mêmes objets ...

    Je pense que tu devrais aller parcourir la msdn ou deux/trois tutos histoire de comprendre comment fonctionnent les références, afin de ne plus avoir ce genre de problèmes par la suite.
    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. [XL-2007] Comment créer une dépendance entre deux listes avec des données issus d'un tableau?
    Par efesdark dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 04/07/2011, 16h22
  2. Formulaire: Créer une dépendance entre deux champs.
    Par mystikfury dans le forum Access
    Réponses: 3
    Dernier message: 17/05/2006, 17h49
  3. Différence entre deux listes
    Par Celelibi dans le forum Linux
    Réponses: 4
    Dernier message: 26/04/2006, 09h46
  4. Réponses: 5
    Dernier message: 22/12/2005, 17h31
  5. [FLASH MX2004] Drag and drop entre deux List
    Par aldo-tlse dans le forum Flash
    Réponses: 15
    Dernier message: 24/09/2005, 01h10

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